已提供cf_clearance cookie仍被Cloudflare识别为机器人的原因排查
Cloudflare识别脚本请求的机制及你的请求问题分析
一、Cloudflare识别非浏览器请求的核心检查点
Cloudflare靠多维度特征组合判断请求是否来自脚本,核心检查项包括:
- TLS/HTTP握手特征:脚本(如requests库)的TLS加密套件优先级、握手流程和真实浏览器存在差异,Cloudflare能通过这些细节识别非浏览器请求。
- 请求头的完整性与顺序:真实浏览器的请求头有固定顺序(比如
Host通常排在最前),且会自动携带Accept-Encoding、Connection等头部;同时请求头的格式必须符合标准,比如sec-ch-ua的引号不能是HTML转义格式。 - Cookie的一致性:Cookie不能重复传递,且
cf_clearance这类Cookie和IP、User-Agent严格绑定,一旦UA或IP变更,旧的cf_clearance直接失效。 - 会话上下文:真实访问会先加载页面、静态资源,再发送API请求,脚本直接跳转到API请求的行为会被判定为异常。
- JavaScript执行能力:Cloudflare的人机验证依赖浏览器的JS执行环境,纯HTTP请求工具(如requests)无法通过这类验证。
- 请求行为模式:脚本的请求频率、间隔比人类操作更规律、更频繁,容易触发速率限制或异常检测。
二、你的请求存在的具体问题
- 重复传递Cookie:你同时在
cookies字典和headers的cookie字段中设置了__Host-next-auth.csrf-token,导致请求中出现重复Cookie,属于明显的非浏览器请求特征。 - 请求头格式错误:
sec-ch-ua字段使用了HTML转义的",而真实浏览器发送的是普通双引号,格式错误会被Cloudflare直接识别。 - 缺失关键请求头:未携带
Accept-Encoding(浏览器通常带gzip, deflate, br)、Connection: keep-alive等常规头部,请求特征不完整。 - cf_clearance可能失效:如果更换User-Agent后未重新获取对应UA的
cf_clearance,这个Cookie会因绑定关系不匹配而失效。 - 缺少前置会话流程:真实访问会先GET
/chat页面获取会话上下文,你的脚本直接发送POST请求,会话逻辑不完整。
三、修复方向
- 移除重复Cookie:选择
cookies字典或headers的cookie字段其中一种方式传递所有Cookie,不要同时使用。 - 修正请求头格式:将
sec-ch-ua中的"替换为普通双引号,例如'"Brave";v="111", "Not(A:Brand";v="8", "Chromium";v="111"'。 - 补充缺失请求头:添加
Accept-Encoding: gzip, deflate, br、Connection: keep-alive等浏览器常用头部。 - 重新获取有效cf_clearance:确保
cf_clearance与当前IP、User-Agent匹配,可通过浏览器手动过验证后复制,或用Playwright、Selenium等支持JS渲染的工具自动获取。 - 模拟完整会话:先发送GET请求访问
https://chat.openai.com/chat,保存返回的Cookie后再发送POST请求,还原真实浏览器的访问流程。
内容的提问来源于stack exchange,提问作者Anm
相关产品推荐
相关产品推荐

