77

我打开网址:

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

我想要做的是以相同的方式与我在某处告诉我的代理连接:

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

但这也没有用。

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

4

7 回答 7

142
proxy = urllib2.ProxyHandler({'http': '127.0.0.1'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com')
于 2009-09-20T02:49:35.757 回答
18

你必须安装一个 ProxyHandler

urllib2.install_opener(
    urllib2.build_opener(
        urllib2.ProxyHandler({'http': '127.0.0.1'})
    )
)
urllib2.urlopen('http://www.google.com')
于 2009-09-20T02:34:39.623 回答
12

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

import os
os.environ['http_proxy'] = '127.0.0.1'
os.environ['https_proxy'] = '127.0.0.1'

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')

反而

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')
于 2013-11-07T18:03:36.440 回答
7

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

url = 'http://www.example.com/'
proxy = urllib2.ProxyHandler()
opener = urllib2.build_opener(proxy)
in_ = opener.open(url)
in_.read()
于 2012-03-16T14:55:23.300 回答
3

除了接受的答案:我的 scipt 给了我一个错误

File "c:\Python23\lib\urllib2.py", line 580, in proxy_open
    if '@' in host:
TypeError: iterable argument required

解决方案是在代理字符串前面添加 http://:

proxy = urllib2.ProxyHandler({'http': 'http://proxy.xy.z:8080'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com')
于 2014-10-08T09:48:21.763 回答
3

如果我们想使用代理访问网页,也可以使用请求。Python 3 代码:

>>> import requests
>>> url = 'http://www.google.com'
>>> proxy = '169.50.87.252:80'
>>> requests.get(url, proxies={"http":proxy})
<Response [200]>

也可以添加多个代理。

>>> proxy1 = '169.50.87.252:80'
>>> proxy2 = '89.34.97.132:8080'
>>> requests.get(url, proxies={"http":proxy1,"http":proxy2})
<Response [200]>
于 2016-07-03T10:19:37.413 回答
0

另外为命令行会话设置代理 打开一个您可能想要运行脚本的命令行

netsh winhttp set proxy YourProxySERVER:yourProxyPORT

在该终端中运行您的脚本。

于 2016-04-25T08:09:21.520 回答