用相同 UA 和 Cookie,浏览器能过,Python 脚本始终 403;用 curl_cffi 指定 chrome120 指纹后成功,把请求头顺序改回默认又变 403。日志里能对上时间点,这种反而好排。
站点同时校验 TLS 握手的加密套件顺序和 HTTP/2 的头部顺序,这两项由客户端库决定,改 UA 改不到。requests 走的是 OpenSSL 默认套件,与浏览器指纹差得很远。这一点先确认清楚,后面就不用反复试。
from curl_cffi import requests r = requests.get(url, impersonate='chrome120', timeout=10) print(r.status_code, len(r.text))
「TLS 指纹 JA3」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
处理上按这个顺序:换用 curl_cffi 或 tls-client 并指定具体浏览器版本;确认底层 HTTP/2 已开启;请求头顺序与目标浏览器保持一致;抓一次 ja3 哈希和服务端日志比对。
结果对不对很好判断,换指纹后连续 500 次请求全部 200,服务端日志里的 ja3 与浏览器一致,403 归零。
