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

PHP cURL发送自定义header失败返回302无接口数据问题求助

问题排查与解决方案

问题背景

我调用的API要求传入两个自定义请求头:Accept-Encoding和x-api-key,基于公开的PHP cURL教程修改后的代码如下:

$curl_handle = curl_init();

$url = "http://thelinktomyAPI";

$headers = array(
            'Accept-Encoding: application/json',
            'Content-Type: application/json',
            'x-api-key: MyLongAPIKey'
            );

// 设置cURL请求地址
curl_setopt($curl_handle, CURLOPT_URL, $url);
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl_handle, CURLOPT_HEADER, true);
curl_setopt($curl_handle, CURLOPT_ENCODING, 'application/json');

// 配置将请求结果以字符串形式返回,而非直接输出
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);

$curl_data = curl_exec($curl_handle);

if ($curl_data === false)
{
    print_r('Curl error: ' . curl_error($curl_handle));
}

curl_close($curl_handle);
print_r($curl_data);

问题现象

开启响应头返回用于校验请求头发送状态时,得到的响应内容如下:

HTTP/1.1 302 Moved Temporarily Date: Thu, 02 Dec 2021 08:09:59 GMT
Content-Type: text/html Content-Length: 110 
Connection: keep-alive
Location: http://thelinktomyAPI 
X-Trace-ID:f306fe34-079b-493c-b5db-073e792ec2a1 
X-Kong-Response-Latency: 0
Server: kong/2.3.3 302 Found

最初判断是请求头未成功发送,导致接口返回异常的text/html类型内容,无法拿到正确的接口数据。

解决方案

在cURL配置中添加跟随重定向的参数即可解决问题:

curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, true);

原理说明

默认情况下cURL不会自动处理服务端返回的重定向响应,本次拿到的302响应是网关层的跳转提示,不是最终接口的返回结果。添加CURLOPT_FOLLOWLOCATION参数后,cURL会自动根据响应头中的Location字段指向的地址继续发起请求,最终拿到接口的正常返回数据。

额外优化建议

注意Accept-Encoding请求头通常用来指定客户端支持的压缩格式(如gzip、deflate),如果要指定接口返回数据格式为JSON,建议将对应请求头改为Accept: application/json,避免不必要的兼容性问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:06:04