You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP CURL无法解析Brotli编码返回乱码,寻求解决方案

解决PHP CURL请求Brotli编码响应乱码问题

返回的乱码内容是因为服务器返回了Brotli压缩格式的响应,而你的CURL配置没有对Brotli编码进行解码处理。以下是几种可行的解决方案:

方案一:使用PHP官方Brotli扩展解码

首先确认你的PHP环境是否安装了ext-brotli扩展:

  • 命令行执行 php -m | grep brotli 查看是否存在
  • 或者在代码中用 var_dump(extension_loaded('brotli')); 验证

如果已安装,修改你的CURL代码,添加编码识别和解码逻辑:

$curl = curl_init();
$contentEncoding = '';

curl_setopt_array($curl, [
    CURLOPT_URL => "https://songstats.p.rapidapi.com/artists/info?spotify_artist_id=2h93pZq0e7k5yf4dywlkpM&songstats_artist_id=vxk62ige",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => [
        "X-RapidAPI-Host: songstats.p.rapidapi.com",
        "X-RapidAPI-Key: MY_API_KEY",
        "Accept-Encoding: br, gzip, deflate" // 声明接受Brotli、gzip等编码
    ],
    // 捕获响应头中的Content-Encoding字段
    CURLOPT_HEADERFUNCTION => function($curl, $header) use (&$contentEncoding) {
        $len = strlen($header);
        $header = trim($header);
        if (stripos($header, 'content-encoding:') === 0) {
            $contentEncoding = trim(str_ireplace('content-encoding:', '', $header));
        }
        return $len;
    }
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    // 判断是否为Brotli编码,执行解码
    if ($contentEncoding === 'br' && function_exists('brotli_decode')) {
        $response = brotli_decode($response);
    }
    echo $response;
}
exit;

方案二:使用第三方Brotli解码库(无扩展时)

如果无法安装官方扩展,可以通过Composer引入第三方解码库:

  1. 安装依赖:
composer require voku/brotli
  1. 修改代码中的解码逻辑:
// 替换方案一中的解码部分
if ($contentEncoding === 'br') {
    require_once 'vendor/autoload.php';
    $response = \voku\helper\Brotli::decode($response);
}

补充说明

  • 你之前尝试添加gzip到Accept-Encoding无效,大概率是服务器强制返回Brotli编码,因此必须主动处理解码,而不是依赖服务器返回其他编码。
  • 确保CURLOPT_RETURNTRANSFER设置为true,否则CURL会直接输出原始压缩内容,无法后续处理。

内容的提问来源于stack exchange,提问作者Codeigniter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:35:33