t77*_*777 40 python python-requests
我得到一个网址:
r = requests.get("http://myserver.com")
正如我在"myserver.com"的"access.log"中看到的那样,使用了客户端的系统代理.但我想完全禁用使用代理requests.
Luk*_*raf 85
我目前唯一能够完全禁用代理的方法如下:
session.trust_env为Falseimport requests
session = requests.Session()
session.trust_env = False
response = session.get('http://www.stackoverflow.com')
这是基于Lukasa的这个评论和(有限的)文件requests.Session.trust_env.
注意:设置trust_env到False还忽略了以下内容:
但是,如果您只想禁用特定域的代理(例如localhost),则可以使用NO_PROXY环境变量:
import os
import requests
os.environ['NO_PROXY'] = 'stackoverflow.com'
response = requests.get('http://www.stackoverflow.com')
jtp*_*yda 43
您可以为每个请求选择代理.来自文档:
import requests
proxies = {
  "http": "http://10.10.1.10:3128",
  "https": "http://10.10.1.10:1080",
}
requests.get("http://example.org", proxies=proxies)
因此,要禁用代理,只需将每个代理设置为无:
import requests
proxies = {
  "http": None,
  "https": None,
}
requests.get("http://example.org", proxies=proxies)
对于Python3,jtpereyda的解决方案不起作用,但以下方法起作用了:
proxies = {
    "http": "",
    "https": "",
}
小智 5
requests 库尊重环境变量。 http://docs.python-requests.org/en/latest/user/advanced/#proxies
因此,请尝试删除环境变量 HTTP_PROXY 和 HTTPS_PROXY。
import os
for k in list(os.environ.keys()):
    if k.lower().endswith('_proxy'):
        del os.environ[k]
阻止 requests/urllib 代理任何请求的方法是将no_proxy(或NO_PROXY)环境变量设置为*例如在 bash 中:
export no_proxy='*'
或者来自 Python:
import os
os.environ['no_proxy'] = '*' 
要理解为什么这样做是因为urllib.request.getproxies函数首先检查环境变量中设置的任何代理(例如 http_proxy 等),或者如果没有设置,则它将使用平台特定调用检查系统配置的代理(例如在 MacOS 上)它将使用系统 scutil/configd 接口进行检查,在 Windows 上它将检查注册表)。
然后,当 urllib 尝试使用任何代理时,该proxyHandler函数将检查no_proxy环境变量的存在和设置- 可以将其设置为如上所述的特定主机名,也可以设置特殊*值,从而使所有主机绕过代理。