代理与urllib2的(Proxy with urllib2)

2019-07-18 15:30发布

我打开使用URL:

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

而我想要做的是同样的方式与代理我得到的地方告诉我连接:

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

但没有任何工作。

我知道urllib2的具有类似代理处理程序,但我不记得该功能。

Answer 1:

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


Answer 2:

你必须安装一个ProxyHandler

urllib2.install_opener(
    urllib2.build_opener(
        urllib2.ProxyHandler({'http': '127.0.0.1'})
    )
)
urllib2.urlopen('http://www.google.com')


Answer 3:

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

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


Answer 4:

要使用系统默认代理(例如,从http_support环境变量),当前请求以下工作(不安装到全球的urllib2):

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


Answer 5:

除了公认的答案:我的素文字给了我一个错误

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


Answer 6:

你也可以使用要求,如果我们想使用代理来访问网页。 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]>


Answer 7:

另外设置代理的命令行会话打开命令行下,您可能要运行脚本

netsh winhttp set proxy YourProxySERVER:yourProxyPORT

运行在终端脚本。



文章来源: Proxy with urllib2