我在一些Python代码中一直使用requests
库,我需要一些帮助来浏览公司代理服务器的阴暗水域。
请考虑以下代码:
response = requests.get(url, proxies={...})
到目前为止一切顺利。 requests
调用使用传递给它的代理。
在下一个示例中,requests
使用在环境变量HTTP_PROXY
和HTTPS_PROXY
中定义的代理:
response = requests.get(url)
(proxies
参数默认为None,触发它去查看环境变量。)
我想做的事情是不同的。我想保留环境变量,因为它们对我使用的其他应用程序是必需的。但我希望请求不要使用代理。我试过了:
response = requests.get(url, proxies={})
但是requests
仍然关闭并获取环境变量代理。在不取消环境变量的情况下,我似乎无法阻止它这样做。
有什么想法吗?
答案 0 :(得分:3)
将trust_env
variable on the session设置为False
。如果不为真(True
是默认值),则完全忽略来自环境的代理信息:
session = requests.Session()
session.trust_env = False
response = session.get(url)
这也会禁用.netrc
authentication支持。如果您仍然需要,那么您还可以看到两个选项:
添加NO_PROXY
环境变量;设置为*
表示根本不应使用代理。您可以通过直接在os.environ
字典中设置密钥来完成此操作。
只需从os.environ
删除代理密钥。
考虑到在OSX和Windows上,Python也会在系统配置中查找代理(因此Windows上的注册表和Mac OS X上的SysConf)。
改变os.environ
是安全的。它是一个常规字典,在你的程序中添加或删除键很好,父shell环境不会被改变。