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

Python requests调用Cloudflare防护的网站API返回403异常问题咨询

排查方向与解决方案

1. 优先校验TLS指纹(JA3)匹配

Cloudflare反爬机制会识别客户端TLS握手阶段的JA3指纹特征,原生requests底层依赖的urllib3默认的加密套件顺序、TLS扩展配置和正常浏览器/客户端差异明显,即使请求头完全复刻也会被识别拦截。另一台同IP设备可以正常请求,大概率是该设备的Python依赖版本的默认JA3特征未被Cloudflare标记拦截:

  • 直接使用适配Cloudflare校验的cloudscraper库替换原生requests,调用逻辑和requests完全兼容:
# 安装命令:pip install cloudscraper
import cloudscraper
# 选择和你使用的UA匹配的浏览器类型
scraper = cloudscraper.create_scraper(browser='firefox')
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:45.0) Gecko/20100101 Firefox/45.0'}
# 注意参数分隔符要使用&而非第二个?,示例地址为修正后的格式
r = scraper.get("https://webapi.somesite.com/req?option1=XXX&option2=YYY", headers=headers)
print(r.status_code)
  • 如果要保留原生requests调用,将另一台正常设备的requests、urllib3、pyopenssl依赖版本完全同步到当前设备,版本一致的情况下JA3指纹会保持相同。

2. 检查请求参数与Cookie配置

  • 你提供的示例请求地址中第二个参数拼接错误使用了?,正常多参数分隔需使用&,先确认实际请求时的地址拼接是否符合规范
  • 浏览器访问API时会自动携带Cloudflare下发的cf_clearance Cookie,你可以从浏览器开发者工具的网络请求中复制有效cf_clearance值,添加到请求头的Cookie字段中即可通过校验,注意Cookie失效后需要重新获取:
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:45.0) Gecko/20100101 Firefox/45.0',
    'Cookie': 'cf_clearance=从浏览器获取的有效cf_clearance值;其他必要的业务Cookie'
}

3. 排查设备层面网络配置差异

  • 确认当前设备的系统代理、防火墙、VPN规则和另一台正常设备完全一致,排除本地网络工具篡改请求特征的情况
  • 可以在当前设备上直接用curl命令发起带相同请求头的请求测试,如果curl可以拿到200响应但Python requests不行,即可确定是Python环境的TLS指纹问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:24:01