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

PHP cURL请求返回403错误 Postman/浏览器访问正常如何解决

问题根因
  • 英航官网前端部署了WAF反爬规则,默认PHP cURL不带浏览器特征的请求会被直接拦截返回403
  • 单独配置CURLOPT_COOKIESESSION无法实现Cookie的自动存储和携带,该参数仅控制是否开启新会话,不会落地存储Cookie文件,服务端下发的校验Cookie在请求结束后会直接丢失
  • 缺失浏览器请求必带的基础头字段,尤其是User-Agent,默认cURL的UA标识会被直接识别为脚本请求
修复后可运行代码
// 配置Cookie存储路径,确保该路径PHP进程有读写权限
$cookieFile = __DIR__ . '/ba_cookie.txt';

$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://www.britishairways.com/solr/lpbd/lpfdestinations?fq=departure_city:LON+AND+arr_city_name_search:***+AND+trip_type:RT+AND+number_of_nights:7+AND+cabin:M&facet.pivot=arrival_city,is_sales_fare&facet=true',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => 'gzip, deflate, br',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 15,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  // 开启Cookie自动读写,自动携带服务端下发的校验Cookie
  CURLOPT_COOKIEJAR => $cookieFile,
  CURLOPT_COOKIEFILE => $cookieFile,
  // 模拟正常Chrome浏览器的User-Agent
  CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
  // 补全浏览器默认请求头,模拟页面发起的请求
  CURLOPT_HTTPHEADER => array(
    'Accept: application/json, text/plain, */*',
    'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8',
    'Referer: https://www.britishairways.com/',
    'Connection: keep-alive'
  ),
  // 本地测试如果报SSL证书校验错误再打开下面两行,生产环境请保持SSL校验开启
  // CURLOPT_SSL_VERIFYPEER => false,
  // CURLOPT_SSL_VERIFYHOST => false,
));
$response = curl_exec($curl);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);

if ($httpCode == 200) {
  header('Content-Type: application/json');
  echo $response;
} else {
  echo "请求失败,状态码:" . $httpCode;
}
配置说明
  • 代码移除了多余的CURLOPT_CUSTOMREQUEST => 'GET'配置,GET是cURL默认请求方法,手动指定该参数会改变cURL的默认请求行为,反而容易触发反爬规则
  • 把原配置中0值的无超时改成了15秒,无超时的长连接会被服务端判定为异常连接直接拒绝
  • 如果替换配置后仍返回403,直接打开浏览器DevTools的网络面板,找到该接口成功请求的全部请求头,逐行复制替换代码里的CURLOPT_HTTPHEADER部分即可,重点不要漏sec-ch-ua系列客户端特征头
  • 首次请求时cURL会自动把服务端返回的校验Cookie写入指定的Cookie文件,后续请求自动携带即可绕过Cookie校验逻辑,不要手动删除该Cookie文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:24:21