我收到一个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
中收到此错误答案 0 :(得分: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')
答案 1 :(得分:4)
检查您使用的是正确的代理。
您可以使用urllib.getproxies获取代理信息(注意:getproxies 不使用动态代理配置,就像使用PAC时一样)。
更新根据有关空代理列表的信息,我建议使用urlopener,其中包含代理名称和信息。
关于如何使用代理urlopeners的一些很好的信息:
答案 2 :(得分:2)
这可能是DNS问题,请尝试使用您正在访问的Web服务器的IP地址,即
import urllib
URL="http://66.102.11.99" # www.google.com
f = urllib.urlopen(URL)
f.read()
如果成功,那么它可能是DNS问题而不是代理问题(但您还应检查代理设置)。
答案 3 :(得分:2)
看起来像DNS问题。
由于您使用的是Windows,因此可以尝试运行此命令
nslookup www.google.com
检查网址是否可以成功解析。
如果没有,则是网络设置问题
如果没问题,那么我们必须考虑可能的替代原因
答案 4 :(得分:2)
我遇到了同样的问题。 在我的系统中,代理配置是通过.PAC文件。 所以我打开了那个文件,拿出了默认的代理网址,对我来说是http://168.219.61.250:8080/
以下测试代码对我有用:
import urllib2
proxy_support = urllib2.ProxyHandler({'http': 'http://168.219.61.250:8080/'})
opener = urllib2.build_opener(proxy_support)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://python.org/')
html = response.read()
print html
如果您的代理需要身份验证,则可能需要添加更多代码
希望这会有所帮助!!