加User-Agent仍403是因为网站需Referer和Cookie等组合校验:Referer须匹配合法上级页面,Cookie需时效有效且环境一致,缺一即拦截。

为什么加了User-Agent还是403?Referer和Cookie才是关键
很多同学加了User-Agent后仍返回403 Forbidden,是因为现代网站的反爬校验是组合拳:只伪造浏览器标识远远不够。服务器会检查Referer是否来自合法入口(比如从搜索结果页跳转),也会验证Cookie是否包含有效会话(如登录态、CSRF token、访问轨迹)。缺失任一环节,都可能被直接拦截。
Referer伪造失败的典型表现和写法
常见错误现象:requests.get(url)加了User-Agent但没设Referer,返回403;或者Referer写成空字符串、拼错域名、协议不匹配(比如用http://去请求https://目标)。
-
Referer必须是该页面的“上一页”真实来源,通常取自浏览器开发者工具 Network 面板中同次请求的Referer字段值 - 不能随意编造,例如目标是
https://example.com/item/123,Referer应设为https://example.com/list?page=2这类上级列表页 - 若目标页本身是首页或无明确上级,可尝试设为站点根域名:
https://example.com/(注意末尾斜杠) - 某些网站校验严格,要求
Referer与当前Origin一致,此时需同步设置Origin头
Cookie不是“复制粘贴”就能用
直接从浏览器复制Cookie字符串填进headers里,大概率失效——因为很多网站的Cookie含时效性字段(如expires、Max-Age)或绑定IP/UA,过期或环境不匹配就会拒收。
- 优先用
requests.Session()对象管理会话,自动处理Set-Cookie响应并回传 - 若需手动注入,务必从浏览器开发者工具 Application → Cookies 中完整复制键值对,不要漏掉
path或domain隐含约束 - 含
HttpOnly标记的Cookie无法被JS读取,但requests可正常发送;反之,前端JS生成的动态Cookie(如加密签名)则requests无法复现 - 部分网站要求
Cookie与User-Agent、Accept-Encoding等头严格匹配,换一个就作废
requests + headers 组合的最小安全模板
以下参数缺一不可,且需根据目标网站微调:
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
立即学习“Python免费学习笔记(深入)”;
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Referer": "https://example.com/",
"Cookie": "sessionid=abc123; csrftoken=xyz789",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Accept-Encoding": "gzip, deflate",
"Connection": "keep-alive",
}
注意:Cookie值必须是原始字符串,不要用dict转str再塞进去;Referer协议、域名、路径层级必须与目标URL逻辑一致;所有头字段名大小写敏感,推荐全小写加横线形式(HTTP标准)。
真正难的不是凑齐这些字段,而是确认哪个字段正在被校验——这需要反复比对浏览器真实请求与脚本请求的差异,逐个开关测试。一旦服务器开始做行为指纹分析,单纯伪造头就不再足够。

















