请求:如何禁用/绕过代理

时间:2015-02-14 23:42:50

标签: python python-requests

我正在获取一个网址:

r = requests.get("http://myserver.com")

正如我在“myserver.com”的“access.log”中看到的那样,使用了客户端的系统代理。但是我想禁用requests使用代理。

6 个答案:

答案 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 Lukasarequests.Session.trust_env的(有限)文档。

注意:trust_env设置为False也会忽略以下内容:

  • 来自.netrccode
  • 的身份验证信息
  • REQUESTS_CA_BUNDLECURL_CA_BUNDLEcode
  • 中定义的CA捆绑包

但是,如果您只想禁用特定域的代理(例如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)