我正在获取一个网址:
r = requests.get("http://myserver.com")
正如我在“myserver.com”的“access.log”中看到的那样,使用了客户端的系统代理。但是我想禁用requests
使用代理。
答案 0 :(得分:77)
我目前唯一知道的禁用代理完全的方法如下:
session.trust_env
设为False
import requests
session = requests.Session()
session.trust_env = False
response = session.get('http://www.stackoverflow.com')
这是基于this comment by Lukasa和requests.Session.trust_env
的(有限)文档。
注意:将trust_env
设置为False
也会忽略以下内容:
但是,如果您只想禁用特定域的代理(例如localhost
),则可以使用NO_PROXY
environment variable:
import os
import requests
os.environ['NO_PROXY'] = 'stackoverflow.com'
response = requests.get('http://www.stackoverflow.com')
答案 1 :(得分:36)
您可以为每个请求选择代理。来自the docs:
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)
答案 2 :(得分:1)
使用 Python3 jtpereyda 的 solution 不起作用,但以下方法起作用:
proxies = {
"http": "",
"https": "",
}
答案 3 :(得分:0)
请求库尊重环境变量。 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]
答案 4 :(得分:0)
阻止请求/ 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
环境变量的存在和设置-可以将其设置为如上所述的特定主机名,或者可以设置特殊的*
值,所有主机都绕过代理。
答案 5 :(得分:0)
r = requests.post('https://localhost:44336/api/',data='',verify=False)
嗨,我在与 localhost 连接以访问我的 .net 后端时遇到了同样的问题 来自带有请求模块的 python 脚本。 这对我有用。 我将 verify 设置为 False 以取消默认的 SSL 验证。
P.s - 上面的代码会抛出一个警告,下面的代码可以忽略
<块引用>导入 urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
r=requests.post('https://localhost:44336/api/',data='',verify=False)