2009-07-02 111 views
2

我得到了一个getaddress错误,并且在做了一些调查之后,它看起来好像它可能是我的公司内部网不允许连接(我假设由于安全性,虽然很奇怪IE的工作原理,但不允许Python打开一个url)。有没有安全的方法来解决这个问题?urllib.urlopen无法正常工作。有没有解决方法?

这里是确切的错误:

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

在恰好处于飞行模式的Windows机器上也会出现此错误。 – 2016-09-21 23:25:20

回答

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

检查你使用了正确的代理服务器。
您可以使用urllib.getproxies获取代理信息(注意:getproxies确实使用而不是使用动态代理配置,就像使用PAC时一样)。

更新根据有关空代理列表的信息,我会建议使用urlopener,与代理名称和信息。
有关如何使用代理urlopeners一些有用的信息:

  1. Urllib manual
  2. Michael Foord's introduction to urllib
+1

urllib。getproxies()返回一个空字典。代理感觉,这可能会帮助我。 – mandroid 2009-07-02 22:35:10

2

可能这是一个DNS问题,请尝试的urlopen与您所访问的Web服务器的IP地址,即

import urllib 
URL="http://66.102.11.99" # www.google.com 
f = urllib.urlopen(URL) 
f.read() 

如果成功,那么它可能是一个DNS问题,而不是代理问题(但你也应该检查你的代理设置)。

+1

我在尝试时出现此错误: IOError:[Errno套接字错误] [Errno 10060]连接尝试失败,因为连接方在一段时间后没有正确响应,或建立的连接失败,因为连接的主机没有回应 看起来它只是超时。 – mandroid 2009-07-03 16:39:01

2

看起来像一个DNS问题。

由于您使用的是Windows,你可以尝试运行此命令

nslookup www.google.com 

要检查网址是否能顺利解决。

如果不是,它是一个网络设置问题

如果正常的话,我们来看看可能的替代导致

+1

当我尝试这个时,它给了我一个服务器和一个IP地址,后面跟着一个评论,说服务器找不到www.google.com:不存在的域。 – mandroid 2009-07-03 16:39:53

2

我面临同样的问题。 在我的系统中,代理配置是通过一个.PAC文件。 所以我opended该文件,拿出默认代理网址,对我来说是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 

您可能需要添加更多的代码,如果你的代理服务器要求身份验证

希望这有助于!

+2

你从哪里找到你的代理配置? – mandroid 2009-07-20 14:25:52

相关问题