Python Requests请求返回403要求启用Cookies问题求助
问题1:Cloudflare识别非浏览器访问的原因
- 无Cookie回传逻辑:Cloudflare在首次访问时会通过
Set-Cookie响应头下发校验Cookie,浏览器会自动将该Cookie带入后续同站点请求,你直接调用requests.get()属于单次无状态请求,不会存储和回传该Cookie,Cloudflare检测不到校验Cookie回传,就会判定你未启用Cookies。 - 存在异常请求头字段:你在请求头中添加了
method、scheme、content-type三个不属于GET请求标准请求头的字段,正常浏览器发起的GET请求不会携带这些内容,异常请求头直接命中Cloudflare拦截规则,返回1020错误。 - TLS指纹不匹配:requests底层的TLS握手特征(JA3指纹)和真实浏览器存在明显差异,该检测发生在TLS握手阶段,属于应用层请求头之外的特征,哪怕完全复刻请求头,Cloudflare也可以通过JA3指纹识别出是脚本请求,直接拦截。
- URL格式错误:你传入的请求URL没有添加
https://前缀,requests无法正确识别协议,会发起异常请求,也会触发拦截。
基础修复方案(适用于低强度Cloudflare规则)
使用requests.Session()对象发起请求,Session会自动处理Cookie的存储、回传逻辑,同时修正URL和请求头:
import requests # 初始化Session,自动维护Cookie生命周期 session = requests.Session() # 清理异常字段后的请求头 session.headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en-GB,en;q=0.5", "Accept-Encoding": "gzip, deflate, br", "Connection": "keep-alive", "Upgrade-Insecure-Requests": "1", "Cache-Control": "max-age=0", "Host": "www.oddschecker.com", "TE": "Trailers" } # URL必须携带https协议前缀 response = session.get("https://www.oddschecker.com") print(response.status_code)
高强度规则绕过方案
如果上述方案仍然返回403,说明触发了JA3指纹检测,使用支持模拟浏览器TLS指纹的库发起请求即可:
from curl_cffi import requests # 指定模拟Firefox68的指纹,和你使用的UA匹配 response = requests.get( "https://www.oddschecker.com", impersonate="firefox68", headers={ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en-GB,en;q=0.5", "Accept-Encoding": "gzip, deflate, br", "Connection": "keep-alive", "Upgrade-Insecure-Requests": "1", "Cache-Control": "max-age=0", "Host": "www.oddschecker.com", "TE": "Trailers" } ) print(response.status_code) print(response.text)
内容的提问来源于stack exchange,提问作者andyguest13
相关产品推荐
相关产品推荐

