You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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-LanguageReferer

内容的提问来源于stack exchange,提问作者SciGuyMcQ

火山引擎 最新活动