我用以下代码打开url:
site = urllib2.urlopen('http://google.com')
我想通过代理连接,已经找到了代理信息:
site = urllib2.urlopen('http://google.com', proxies={'http':'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')
您需要安装ProxyHandler代理处理程序
urllib2.install_opener(
urllib2.build_opener(
urllib2.ProxyHandler({'http': '127.0.0.1'})
)
)
urllib2.urlopen('http://www.google.com')
您可以使用环境变量来设置代理。
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')
url = 'http://www.example.com/'
proxy = urllib2.ProxyHandler()
opener = urllib2.build_opener(proxy)
in_ = opener.open(url)
in_.read()
如果我们想要使用代理访问网页,也可以使用requests。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]>
File "c:\Python23\lib\urllib2.py", line 580, in proxy_open
if '@' in host:
TypeError: iterable argument required
proxy = urllib2.ProxyHandler({'http': 'http://proxy.xy.z:8080'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com')
此外,为命令行会话设置代理 打开一个命令行窗口,您可能想要在其中运行脚本
netsh winhttp set proxy YourProxySERVER:yourProxyPORT
在那个终端中运行你的脚本。
urllib2
中没有uninstall
方法,但我们可以进行一次性代理设置; 我们不需要安装
打开器,而是创建一个请求
对象,并使用打开器来打开
它。 - satoruHTTP_PROXY
,然后在你的代码中检查它是否被定义,使用os.environ["HTTP_PROXY"]
。 - ccpizza