卷曲和Python请求(获取)报告了不同的http状态代码

时间:2018-07-10 14:55:01

标签: python python-3.x curl python-requests

我写了一个python脚本来验证主机的url连接。在python(3.6)curl模块中,在Linux requests中报告成功(http 200)的内容报告为403。

我希望有人可以帮助我了解报告的http状态代码中的区别吗?

从Linux命令行卷曲。...

$ curl -ILs https://www.h2o.ai|egrep ^HTTP
HTTP/1.1 200 OK

Python请求模块.....

>>> import requests
>>> url = 'https://www.h2o.ai'
>>> r = requests.get(url, verify=True, timeout=3)
>>> r.status_code
403
>>> requests.packages.urllib3.disable_warnings()
>>> r = requests.get(url, verify=False, timeout=3)
>>> r.status_code
403

1 个答案:

答案 0 :(得分:6)

似乎python-requests/<version> User-Agent收到了网站的403响应:

In [98]: requests.head('https://www.h2o.ai', headers={'User-Agent': 'Foo bar'})
Out[98]: <Response [200]>

In [99]: requests.head('https://www.h2o.ai')
Out[99]: <Response [403]>

您可以根据需要与网站所有者联系,也可以通过User-Agent标头使用其他用户代理(如我上面所用)。


我是如何调试的:

我已经使用curl-v)选项运行--verbose来检查正在发送的标头,然后使用requestsresponse.request一起检出了标头(假设响应保存为response)。

User-Agent标头外,我没有发现任何显着差异;因此,更改User-Agent标头的工作与我预期的一样。