如何修复PHP Curl调用API返回的黑钻石问号乱码问题?
解决API请求返回乱码问题
问题根源
你在请求头中声明支持gzip, deflate, br压缩编码,但PHP的cURL默认不会自动解压缩这类响应,导致拿到的是二进制压缩数据,直接输出就会显示乱码。此外代码中还有几处语法错误会影响请求执行。
修复步骤
启用自动解压缩
给cURL添加CURLOPT_ENCODING选项并设为空字符串,让cURL自动识别并解压缩服务器返回的压缩内容:CURLOPT_ENCODING => '',修复请求头语法错误
CURLOPT_HTTPHEADER数组里的'Connection: keep-alive',,多了一个逗号,会触发PHP语法错误,删除多余逗号即可:'Connection: keep-alive',移除错误的Content-Type头
GET请求无需设置Content-Type(该头用于标识请求体格式,GET无请求体),且你已声明接受JSON响应,直接删掉"Content-Type: text/html; charset=ISO-8859-1"这一行。可选:添加JSON解析校验
解压缩后校验JSON解析结果,提前排查问题:$data = json_decode($response, true); if (json_last_error() !== JSON_ERROR_NONE) { echo 'JSON解析错误: ' . json_last_error_msg(); }
修复后的完整代码
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://5sim.net/v1/user/check/' . $id, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_ENCODING => '', // 自动处理压缩编码 CURLOPT_HTTPHEADER => array( 'Accept: application/json', 'Accept-Language: tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7', 'Connection: keep-alive', 'Host: 5sim.net', 'Referer: https://5sim.net/', 'sec-ch-ua: "Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"', 'sec-ch-ua-mobile: ?0', 'sec-ch-ua-platform: "Windows"', 'Sec-Fetch-Dest: empty', 'Sec-Fetch-Mode: cors', 'Sec-Fetch-Site: same-origin', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', 'X-XSRF-TOKEN: 2393b8e8-2f15-410e-a384-536c6fed6972' ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo 'cURL错误: ' . $err; } else { $data = json_decode($response, true); if (json_last_error() !== JSON_ERROR_NONE) { echo 'JSON解析错误: ' . json_last_error_msg(); } else { print_r($data); } }
内容的提问来源于stack exchange,提问作者Artew Seller
相关产品推荐
相关产品推荐

