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

命令行cURL正常但PHP cURL返回403 Cloudflare站点加密套件是否为诱因?

结论

加密套件不是导致PHP cURL请求被Cloudflare拦截返回403的核心原因。Cloudflare默认全量支持主流TLS 1.2、TLS 1.3加密套件,你提到的TLS_AES_256_GCM_SHA384属于合规白名单套件,不会单独触发拦截规则。

常见触发403的真实原因

  • 额外请求头差异:多数PHP cURL环境会默认携带Expect: 100-continue请求头,而手动执行的命令行cURL不会发送该头,Cloudflare Bot管理规则会将携带该头的非浏览器请求标记为异常,触发拦截。
  • JA3指纹差异:加密套件只是TLS JA3指纹的组成项之一,命令行cURL与PHP cURL绑定的底层SSL库版本、编译参数不同,会生成完全不同的JA3指纹,这是参数完全一致的两个请求被区别拦截的最常见原因。
  • 出口IP差异:如果命令行请求在本地执行,PHP代码部署在服务器上,两者出口IP不同,若服务器IP存在历史恶意请求记录,会直接被Cloudflare拉黑返回403。

验证修复方案

  1. 先在PHP请求头中添加空Expect项禁用默认头,重新测试:
$headers[] = 'Expect:';
  1. 若仍返回403,强制对齐PHP cURL的TLS版本与加密套件和命令行一致,排除加密套件相关的指纹影响:
// 强制使用TLS 1.2
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
// 指定加密套件和命令行一致
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'ECDHE-RSA-AES128-GCM-SHA256');
  1. 以上操作后仍返回403即可确认是JA3指纹被拦截,可通过将PHP服务器IP加入Cloudflare IP白名单、调低Cloudflare安全规则阈值的方式解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:45:03