urllib.urlopen 无法使用,有解决办法吗?
我遇到了一个“getaddress”错误,经过一番调查,发现可能是我的公司内部网络不允许连接(我猜是出于安全原因,虽然奇怪的是IE浏览器可以用,但Python却无法打开网址)。有没有什么安全的方法可以绕过这个问题呢?
这是具体的错误信息:
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
b = urllib.urlopen('http://www.google.com')
File "C:\Python26\lib\urllib.py", line 87, in urlopen
return opener.open(url)
File "C:\Python26\lib\urllib.py", line 203, in open
return getattr(self, name)(url)
File "C:\Python26\lib\urllib.py", line 342, in open_http
h.endheaders()
File "C:\Python26\lib\httplib.py", line 868, in endheaders
self._send_output()
File "C:\Python26\lib\httplib.py", line 740, in _send_output
self.send(msg)
File "C:\Python26\lib\httplib.py", line 699, in send
self.connect()
File "C:\Python26\lib\httplib.py", line 683, in connect
self.timeout)
File "C:\Python26\lib\socket.py", line 498, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
IOError: [Errno socket error] [Errno 11001] getaddrinfo failed
更多信息:我在使用urllib2.urlopen时也遇到了这个错误。
5 个回答
2
看起来像是DNS的问题。
因为你在用Windows系统,你可以试着运行这个命令:
nslookup www.google.com
来检查一下这个网址能不能成功解析。
如果不能,那就是网络设置的问题。
如果可以,那我们就得看看其他可能的原因了。
4
检查一下你是否在使用正确的代理。
你可以通过使用 urllib.getproxies 来获取代理信息(注意:getproxies 不适用于动态代理配置,比如使用 PAC 的情况)。
更新 关于空代理列表的信息,我建议使用一个 urlopener,并提供代理名称和信息。
这里有一些关于如何使用代理和 urlopeners 的好资料:
7
你可能需要填写代理信息。
import urllib2
proxy_handler = urllib2.ProxyHandler({'http': 'http://yourcorporateproxy:12345/'})
proxy_auth_handler = urllib2.HTTPBasicAuthHandler()
proxy_auth_handler.add_password('realm', 'host', 'username', 'password')
opener = urllib2.build_opener(proxy_handler, proxy_auth_handler)
opener.open('http://www.stackoverflow.com')