核心原则

86103 风控的根因是「字段不像」,不是 IP 被封或频次太高。

必检清单(按优先级)

1. TLS impersonate 版本

from curl_cffi.requests.impersonate import BrowserType
supported = [b for b in dir(BrowserType) if 'chrome' in b.lower()]

规则:impersonate 版本落后真实 Chrome ≥2 个大版本必被拦。

import curl_cffi.requests as req
session = req.Session(impersonate='chrome132')

2. sec-ch-ua greasy brand

Chrome 每次构建轮换 greasy brand 字符:.A/?A_(A:-A._A

import random
greasy_chars = ['.A/', '?A_', '(A:', '-A.', '_A ']
headers['sec-ch-ua'] = (
    f'"Google Chrome";v="132", "Chromium";v="132", "{random.choice(greasy_chars)}Brand";v="99"'
)

3. accept-encoding 必须含 zstd

Chrome 117+ 强制带 zstd,不带就是脚本特征:

headers['accept-encoding'] = 'gzip, deflate, br, zstd'
# 错误:domain 与目标请求域名不一致,cookie 不会发出
session.cookies.set('_uuid', 'xxx', domain='.bilibili.com')

# 正确:domain 必须与目标请求域名一致
session.cookies.set('_uuid', 'xxx', domain='.huasheng.cn')

排查流程

  1. 用 chrome-devtools-mcp 驱动真实 Chrome 跑完整流程,抓真包 headers
  2. 与协议层 dump 的 headers 做字节级 diff
  3. 优先修字段顺序、greasy brand、accept-encoding