Python2.7 requests发送GET请求返回404,CURL及浏览器可正常访问
解决Python requests请求返回404但curl/浏览器正常的问题
我之前也碰到过一模一样的情况!问题大概率出在请求头的User-Agent字段上,很多网站会通过这个字段识别请求来源,屏蔽看起来像爬虫的请求。
问题原因
requests库默认的User-Agent是类似python-requests/2.XX.X的标识,ynet.co.il这类网站可能把这种请求判定为非合法访问,故意返回404错误;而curl默认的User-Agent是curl/[版本号],浏览器的User-Agent则是标准的浏览器标识,所以这两种方式能正常访问。
解决方案
在发送GET请求时,手动添加模拟浏览器的User-Agent头:
import requests # 模拟Chrome浏览器的请求头(也可以换成你常用浏览器的标识) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } r = requests.get('https://www.ynet.co.il/articles/07340L-446694800.html', headers=headers) print(r.status_code) # 应该会返回200了 print(r.reason)
额外检查点
如果添加User-Agent后还是不行,可以试试以下操作:
- 检查是否需要携带浏览器中的Cookie(可以通过浏览器开发者工具复制Cookie,添加到headers里)
- 确认请求的URL完全一致,没有拼写错误
- 尝试添加其他常见请求头,比如
Accept-Language、Referer等
内容的提问来源于stack exchange,提问作者SciGuyMcQ




