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

PHP cURL请求返回403但Postman正常的问题求助

问题原因与解决方案

核心差异点分析

对比你的PHP cURL和Postman请求头,以下几个差异是导致403 Forbidden的关键:

  1. 非法空值请求头:你在PHP代码中添加了X-Ovhrequest-Id:、X-Forwarded-Proto:这类带空值的请求头,这类不符合HTTP规范的头可能被目标服务器的安全机制拦截。
  2. Host头不匹配:目标URL的域名是lmt.fn.sportradar.com,但你的PHP cURL请求中Host头被设置为[myhost.com](大概率是服务器环境自动注入的错误值),错误的Host头会触发服务器的访问限制逻辑。
  3. 缺失标准请求头:Postman发送了Accept-Encoding: gzip, deflate, br,你的PHP cURL缺少这个头,部分服务器会以此作为请求合法性的判断依据。

修复后的PHP cURL代码

// 仅保留Postman中明确发送的必要请求头
$headers = [
    'User-Agent: PostmanRuntime/7.29.2',
    'Accept: */*',
    'Accept-Encoding: gzip, deflate, br',
    'Connection: keep-alive',
    'Host: lmt.fn.sportradar.com' // 强制设置正确的目标域名Host头
];

// 初始化cURL
$curl = curl_init();

// 配置cURL参数
curl_setopt($curl, CURLOPT_URL, 'https://lmt.fn.sportradar.com/common/fr/Etc:UTC/gismo/match_info/43067423');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_HEADER, 0);
// 启用自动编码处理,匹配Postman的编码行为
curl_setopt($curl, CURLOPT_ENCODING, '');

// 执行请求
$response = curl_exec($curl);

// 检查请求错误
if(curl_errno($curl)){
    echo 'Curl错误: ' . curl_error($curl);
}

curl_close($curl);

额外注意事项

  • 不要添加任何环境特定或用途不明的请求头(比如X-Ovhrequest-Id这类非标准头),只保留符合HTTP规范的通用头。
  • 如果你通过代理访问,需确保代理不会篡改Host头;直接请求时,强制设置Host头为目标域名是最稳妥的方式。
  • CURLOPT_ENCODING: ''会让cURL自动适配服务器支持的编码格式,和Postman的行为完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:27:48