当目标URL使用ip地址时,Python“requests”模块不尊重http_proxy环境变量?

2024-04-29 03:17:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图获得一个Python脚本,它使用requests模块通过代理请求数据。根据requests documentation

You can also configure proxies by setting the environment variables HTTP_PROXY and HTTPS_PROXY.

然而,据我所知,这只在目标URL引用主机名时有效,而在目标URL引用IP地址时失败。例如,我试图获取资源http://overcloud-public-vip:5000。主机名(overcloud-public-vip)不能在本地解析,但可以由代理解析为192.168.30.6。这是有效的:

>>> import os
>>> import requests
>>> os.environ['HTTP_PROXY'] = 'http://localhost:8123'
>>> requests.get('http://overcloud-public-vip:5000')
<Response [300]>

但是如果我尝试同样的方法,使用ip地址而不是 主机名,失败:

^{pr2}$

我可以确认(使用strace -e trace=connect python)该模块 千万不要在这一秒钟内尝试联系代理服务器 案例。在

这尤其令人沮丧,因为即使我使用 一个主机名,代码最终将从 远程服务器本身包含ip地址,所以我简单地 把失败推迟了一步。在

这种行为似乎与文档不符。我在用 请求2.9.1版:

>>> requests.__version__
'2.9.1'

这是requests中的一个bug,还是我大脑中的一个bug?在


Tags: 模块importiphttpurl代理目标os