python请求http响应500(可以在浏览器中访问站点)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python请求http响应500(可以在浏览器中访问站点)相关的知识,希望对你有一定的参考价值。

我想知道我在这里做错了什么,但我一直迷路......

在python 2.7中,我正在运行以下代码:

>>> import requests
>>> req = requests.request('GET', 'https://www.zomato.com/praha/caf%C3%A9-a-restaurant-z%C3%A1ti%C5%A1%C3%AD-kunratice-praha-4/daily-menu')
>>> req.content
'<html><body><h1>500 Server Error</h1>
An internal server error occured.
</body></html>
'

如果我在浏览器中打开这个,它会正确响应。我正在挖掘并发现类似的urllib库(500 error with urllib.request.urlopen),但是我无法适应它,甚至更多我想在这里使用请求。

我可能会在这里找到一些丢失的代理设置,例如这里建议的(Perl File::Fetch Failed HTTP response: 500 Internal Server Error),但有人可以解释一下,这个的正确解决方法是什么?

答案

与浏览器请求不同的一件事是User-Agent;但是您可以使用以下请求更改它:

url = 'https://www.zomato.com/praha/caf%C3%A9-a-restaurant-z%C3%A1ti%C5%A1%C3%AD-kunratice-praha-4/daily-menu'
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.90 Safari/537.36'}
response = requests.get(url, headers=headers)
print(response.status_code) #should be 200
另一答案

User-Agent以及其他标题元素可能会导致您的问题。

当我遇到这个错误时,我看到浏览器使用Wireshark发出的常规请求,结果发现除了服务器期望在那里的标题中的User-Agent之外还有其他东西。

在模拟python请求中浏览器发送的标头后,服务器停止抛出错误。

以上是关于python请求http响应500(可以在浏览器中访问站点)的主要内容,如果未能解决你的问题,请参考以下文章

HTTP的响应码?

IIS站点请求有时200,有时500是啥原因?

Http协议

预检响应在角度 4 中具有无效的 HTTP 状态代码 500

Python爬虫-02:HTTPS请求与响应,以及抓包工具Fiddler的使用

Python Web