Referer和User-Agent必须成对动态匹配并真实有效,单独伪造任一字段基本无效;Referer需为真实跳转来源URL且路径精确匹配,User-Agent须与之风格一致并轮换更新,同时补全Accept、Accept-Language等配套头字段。

Referer 和 User-Agent 必须成对设置、动态匹配,单独伪造任一字段基本无效——尤其在知乎、淘宝、小红书这类平台,缺一就直接返回 403 或空 HTML。
Referer 必须是真实跳转来源 URL,不能乱填
防盗链校验本质是服务端比对 Referer 域名、协议、路径是否在白名单内。填 "https://google.com" 或空字符串 "",99% 被拒;填 "https://example.com" 却实际要请求 https://example.com/article/123 的图片,也可能因路径不匹配失败。
- 用浏览器打开目标资源所在页面(比如文章页),在 Network 面板里点开那个图片/视频请求,复制它发出时的完整
Referer值——通常是该页面 URL 本身 - 如果原始 Referer 含中文或特殊字符(如
"https://site.com/新闻?id=1"),必须先用urllib.parse.quote()编码再塞进 headers,否则后端解析失败 -
requests.Session()不会自动继承 Referer,每次get()都得显式传headers={"Referer": "..."}
User-Agent 要和 Referer 风格一致,且不能长期固定
服务器常组合校验:Referer 是 "https://www.zhihu.com/question/456",但 UA 还是默认的 "python-requests/2.31.0",等于主动举手说“我是爬虫”。
- UA 字符串需匹配 Referer 所属平台的主流浏览器特征:Zhihu Referer 就配 Chrome Win10 UA,iOS 小红书 Referer 就配 Safari iPhone UA
- 硬编码一个 UA 很危险——建议准备 3–5 条不同系统+浏览器组合的 UA 轮换,或用
fake-useragent动态获取(注意它首次调用会发 HTTP 请求,生产环境应缓存结果) - 别忽略
Accept和Accept-Language:Chrome 请求通常带"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"和"zh-CN,zh;q=0.9",缺失可能触发次级校验
为什么加了还是 403?优先检查这三点
不是 Referer 或 UA 写错了,而是它们之间或与其他头字段存在隐性冲突。
- Referer 域名和目标资源域名不一致(比如 Referer 是
"https://m.example.com",但请求的是"https://www.example.com"的图),部分站点严格校验子域 - User-Agent 里声明了
Chrome/120.0.0.0,但没带Sec-Ch-Ua等 Chromium 新增头字段,现代反爬中间件(如百度云加速、奇安信)会直接拦截 - 目标资源需要登录态,而你只塞了 Referer + UA,却没传有效的
Cookie或X-Requested-With,此时返回 200 但内容为空或含__jsl_clearance_s=
最易被忽略的点:Referer 和 UA 的“时间一致性”——比如你上周抓的 Referer 值,现在页面结构已变,URL 规则更新,旧 Referer 就失效;UA 字符串若超过半年没更新,也容易被识别为过期爬虫指纹。实际运行中,这两者都得随目标站迭代同步调整。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











