即使在配置代理后,使用urllib或urllib2连接到网络也无法正常工作

时间:2012-03-22 06:21:00

标签: python proxy urllib2 urllib

即使在使用了proxyhandler(在urllib2的情况下)并在urllib中设置代理,我也无法使用urllib或urllib2打开read()的url。 我使用代理连接到互联网的网络有代理(取自我的浏览器):

HTTP代理:someproxy.com端口:1080

我试过urllib:

import urllib
myproxies = {'http':'http://someproxy.com:1080'}
data = urllib.urlopen('http://www.google.com', proxies = myproxies).read()

但是我收到了这个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\urllib.py", line 84, in urlopen
    return opener.open(url)
  File "C:\Python27\lib\urllib.py", line 200, in open
    return self.open_unknown_proxy(proxy, fullurl, data)
  File "C:\Python27\lib\urllib.py", line 219, in open_unknown_proxy
  raise IOError, ('url error', 'invalid proxy for %s' % type, proxy)
IOError: [Errno socket error] [Errno 11001] getaddrinfo failed'

和urllib2:

import urllib2
proxy = urllib2.ProxyHandler({'http':'http://someproxy.com:1080'})
opener1 = urllib2.build_opener(proxy)
urllib2.install_opener(opener1)
urllib2.urlopen('http://www.google.com')'

我收到此错误:

Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "C:\Python27\lib\urllib2.py", line 126, in urlopen
     return _opener.open(url, data, timeout)
   File "C:\Python27\lib\urllib2.py", line 394, in open
     response = self._open(req, data)
   File "C:\Python27\lib\urllib2.py", line 412, in _open
     '_open', req)
   File "C:\Python27\lib\urllib2.py", line 372, in _call_chain
     result = func(*args)
   File "C:\Python27\lib\urllib2.py", line 1199, in http_open
     return self.do_open(httplib.HTTPConnection, req)
   File "C:\Python27\lib\urllib2.py", line 1174, in do_open
     raise URLError(err)
 urllib2.URLError: <urlopen error [Errno 11001] getaddrinfo failed>

任何帮助将不胜感激。

MRick

1 个答案:

答案 0 :(得分:2)

我认为您需要以下urllib

...
proxies = {'http':'http://someproxy.com:1080/'}
data = urllib.urlopen('http://www.google.com', proxies=proxies).read()
...

urllib2

...
proxy = urllib2.ProxyHandler({'http':'http://someproxy.com:1080'})
...

请注意,代理网址包含您的代码省略的协议部分。