Curl和Python请求(get)报告不同的http状态代码

Curl和Python请求(get)报告不同的http状态代码,python,python-3.x,curl,python-requests,Python,Python 3.x,Curl,Python Requests,我已经编写了一个python脚本来验证来自主机的url连接。在linuxcurl中报告成功的内容(http 200)在python(3.6)requests模块中报告为403 我希望有人能帮助我理解报告的http状态代码的区别 来自Linux命令行的Curl $ curl -ILs https://www.h2o.ai|egrep ^HTTP HTTP/1.1 200 OK Python请求模块 >>> import requests >>> url = '

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

我希望有人能帮助我理解报告的http状态代码的区别

来自Linux命令行的Curl

$ 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

似乎
python请求
用户代理
正在收到来自站点的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]>
[98]中的
:requests.head('https://www.h2o.ai,headers={'User-Agent':'Foo-bar'})
出[98]:
In[99]:requests.head('https://www.h2o.ai')
出[99]:
如果需要,您可以联系网站所有者,也可以通过
用户代理
标题使用不同的用户代理(如上文所述)


我是如何调试的:

我使用
-v
-verbose
)选项运行
curl
,检查发送的头,然后使用
response.request
(假设响应保存为
response
)检查
请求的头


除了
用户代理
标题之外,我没有发现任何显著差异;因此,更改
用户代理
标题的效果与我预期的一样。

您要发送哪些标题?你收到了什么邮件?403的原因可能在正文中有更详细的解释。这很有帮助,谢谢。您是否介意分享一下您是如何得出以下结论的背景信息:“用户代理正在接受来自该站点的403响应”。例如,如果我正在进行故障排除,我怎么知道这个虚拟标题是h2o.ai所期望的?这个响应和(特别是)更新是一件美妙的事情。非常感谢。