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

为什么PHP中curl_exec发送请求时未向服务端传递Authorization令牌?

问题原因与解决方案

以下是可能导致该问题的几个常见原因及对应修复方案:

  • 请求触发3xx重定向,cURL默认不转发Authorization头
    cURL默认配置下,遇到301/302等重定向响应时,不会将Authorization头传递给重定向后的目标地址,导致最终请求没有携带令牌。
    修复方法:在你的cURL配置中添加以下两行参数:

    // 允许自动跟随重定向
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    // 允许重定向时携带Authorization头
    curl_setopt($curl, CURLOPT_UNRESTRICTED_AUTH, true);
    
  • 你采集的日志并非PHP cURL发出的请求日志
    对比你提供的两份日志可以发现,PHP代码对应请求的UA、Accept、Sec-Fetch系列字段完全是浏览器请求的特征,和cURL默认请求特征、Reqbin请求特征完全不符,大概率是你误将浏览器访问PHP文件的请求日志,当成了PHP内部cURL发出的请求日志。
    验证方法:在cURL执行前添加参数开启请求头输出,执行后打印实际发出的请求头,确认是否携带Authorization:

    // 开启记录请求头
    curl_setopt($curl, CURLINFO_HEADER_OUT, true);
    $resp = curl_exec($curl);
    // 打印实际发出的请求头
    var_dump(curl_getinfo($curl, CURLINFO_HEADER_OUT));
    
  • cURL环境兼容问题
    部分老旧版本的cURL对无scheme前缀的Authorization头处理存在异常,可以尝试调整头的写法,添加令牌类型前缀,同时新增一个测试用的自定义头,确认是否是所有自定义头都被丢弃:

    $headers = array(
      "Authorization: Bearer sdfascvthsgdgdssgvsgscf",
      "X-Test-Header: testvalue"
    );
    
  • 本地代理配置导致头被丢弃
    如果你的PHP运行环境配置了全局HTTP代理,部分代理会默认丢弃Authorization头避免敏感信息泄露,可以在cURL配置中添加参数强制不使用代理:

    curl_setopt($curl, CURLOPT_PROXY, '');
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:06:02