2009-07-02 115 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

相關問題