使用urllib2代理

Chr*_*ker 73 python proxy urllib2

我打开网址:

site = urllib2.urlopen('http://google.com')

我想要做的是用同样的方式连接我在某个地方告诉我:

site = urllib2.urlopen('http://google.com', proxies={'http':'127.0.0.1'})

但那也不起作用.

我知道urllib2有类似代理处理程序的东西,但我不记得那个功能.

Zel*_*luX 141

proxy = urllib2.ProxyHandler({'http': '127.0.0.1'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com')
Run Code Online (Sandbox Code Playgroud)

  • @ Satoru.Logic:我认为传统方法是配置一个环境变量,如`HTTP_PROXY`,然后检查代码是否使用`os.environ ["HTTP_PROXY"]`定义. (3认同)
  • 似乎`urllib2`中没有'uninstall`方法,但我们可以进行一次性代理设置; 而不是"安装"开启者,我们创建一个`request`对象,并使用一个开启器来打开它. (2认同)

dcr*_*sta 18

您必须安装ProxyHandler

urllib2.install_opener(
    urllib2.build_opener(
        urllib2.ProxyHandler({'http': '127.0.0.1'})
    )
)
urllib2.urlopen('http://www.google.com')
Run Code Online (Sandbox Code Playgroud)


cas*_*ere 12

您可以使用环境变量设置代理.

import os
os.environ['http_proxy'] = '127.0.0.1'
os.environ['https_proxy'] = '127.0.0.1'
Run Code Online (Sandbox Code Playgroud)

urllib2将以这种方式自动添加代理处理程序.您需要单独为不同的协议设置代理,否则它们将失败(就不通过代理而言),请参阅下文.

例如:

proxy = urllib2.ProxyHandler({'http': '127.0.0.1'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com')
# next line will fail (will not go through the proxy) (https)
urllib2.urlopen('https://www.google.com')
Run Code Online (Sandbox Code Playgroud)

代替

proxy = urllib2.ProxyHandler({
    'http': '127.0.0.1',
    'https': '127.0.0.1'
})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
# this way both http and https requests go through the proxy
urllib2.urlopen('http://www.google.com')
urllib2.urlopen('https://www.google.com')
Run Code Online (Sandbox Code Playgroud)


blu*_*yed 6

要使用默认系统代理(例如,来自http_support环境变量),以下内容适用于当前请求(无需将其全局安装到urllib2中):

url = 'http://www.example.com/'
proxy = urllib2.ProxyHandler()
opener = urllib2.build_opener(proxy)
in_ = opener.open(url)
in_.read()
Run Code Online (Sandbox Code Playgroud)