加了User-Agent仍返回403,是因为服务器已升级反爬策略,需综合校验Accept、Accept-Language、Sec-Ch-Ua、Sec-Fetch-*等请求头及请求频率;单独设置UA如同只换外套不换身份证,极易被识别为爬虫。

为什么加了User-Agent还是返回403 Forbidden
因为很多网站已不再只校验User-Agent,而是结合Accept、Accept-Language、Referer甚至请求频率做综合判断。单独改User-Agent就像只换外套不换身份证——服务器一眼识破是爬虫。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 用真实浏览器抓包(如Chrome DevTools → Network → 刷新页面 → 点一个请求 → Headers),完整复制
Request Headers里除Cookie外的常见字段 - 至少补全
Accept、Accept-Language、Sec-Ch-Ua(如有)、Sec-Fetch-*系列头(部分站点强校验) - 避免用过时的UA字符串,比如还写
Mozilla/5.0 (Windows NT 10.0; Win64; x64)但没带Chrome/120.0.0.0这类新版标识
如何安全复用浏览器的Cookie而不暴露登录态风险
直接把登录后的Cookie字符串硬编码进代码,等于把门禁卡贴在玻璃门上——一旦失效或被轮换,整个请求链崩掉;更糟的是,若含sessionid或_auth_token等敏感字段,可能引发账号异常。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 用
selenium或playwright启动真实浏览器,登录后导出requests.Session兼容的cookie字典:from requests import Session<br>from selenium import webdriver<br><br>driver = webdriver.Chrome()<br>driver.get("https://example.com/login")<br># 手动或自动完成登录<br>cookies = driver.get_cookies()<br>s = Session()<br>for c in cookies:<br> s.cookies.set(c['name'], c['value'], domain=c.get('domain', '')) - 避免长期保存
Cookie文件,尤其不要提交到Git;如需持久化,加密存储并设置过期时间 - 检查
Cookie中是否含HttpOnly字段——这类cookie无法被JS读取,selenium也拿不到,必须走服务端登录流程或换playwright(支持拦截响应头)
requests.get()发请求仍被封?试试Session + mount自定义适配器
默认requests每次新建TCP连接,没有复用、无连接池、不维护TLS会话上下文,而现代WAF(如Cloudflare、Akamai)会检测“连接指纹”:TLS版本、SNI顺序、ALPN协商值等。一次性的请求像访客刷门卡进楼又立刻消失,系统直接标记为可疑。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 始终用
Session对象,它自动复用连接、保持cookie、复用DNS缓存 - 给
Session挂载定制HTTPAdapter,控制底层urllib3行为:s = Session()<br>adapter = HTTPAdapter(pool_connections=10, pool_maxsize=10)<br>s.mount("https://", adapter) - 必要时指定
ssl_context模拟真实浏览器TLS栈(需pyOpenSSL和cryptography),但多数场景下,仅开启keep-alive+ 合理pool_maxsize已能绕过初级封禁
哪些行为比Header更易触发403,却常被忽略
Header只是表层,真正让WAF拉响警报的,往往是请求节奏与内容语义:比如1秒内连续GET 20个不同ID的详情页,或URL里带?page=1→?page=2→?page=3这种线性递增参数——这在人类操作中几乎不存在。
容易踩的坑:
- 用
time.sleep(0.1)不够:WAF识别的是“请求间隔标准差”,固定间隔反而更像脚本;应改用random.uniform(1.2, 2.8)类波动延时 - URL参数排序不一致:比如
/api?b=2&a=1和/api?a=1&b=2被当作两个资源,频繁切换会触发路径遍历检测 - 响应体解析失败后仍继续请求:比如某次返回HTML登录页,代码却强行用
json.loads()解析,接着抛错重试——这种“异常+高频”组合是典型爬虫特征
绕过不是拼Header长度,而是让每一次请求,在网络层、应用层、行为层都像一个真实的、有停顿、有上下文、偶尔点错链接的人。最危险的,永远是你以为“已经够像人”的那个环节。


















