2013-08-06 18 views
1

我試圖按照來自this thread的建議,但它不起作用。在這一點上,我只是想執行一個非常簡單的測試,以確保我實際上從我試圖打開的網站獲取返回的數據。對於我的簡單測試,我試圖打開雅虎天氣api。我已經證實,在Web瀏覽器中輸入此地址確實會返回數據。我已經嘗試了這兩個代碼片段,但都沒有工作。無法在Python 2.7中使用urlopen來工作

import urllib 

params = urllib.urlencode({'w': 2482950}) 
f = urllib.urlopen("http://weather.yahooapis.com/forecastrss?%s" % params) 
print f.read() 

這個例子直接來自Python網站。這死與:

import httplib 

conn = httplib.HTTPConnection(host='weather.yahooapis.com', timeout=10) 
req = '/forecastrss?w=2482950' 
try: 
    conn.request('GET',req) 
except: 
    print "Didn't work" 

content = conn.getresponse().read() 
print content 

嘗試這給了我以下錯誤:

IOError: [Errno socket error] [Errno 110] Connection timed out

我使用httplib的這樣也試過

self.fp = sock.makefile('rb', 0) 
AttributeError: 'NoneType' object has no attribute 'makefile' 

看來,我永遠不會做連接到遠程主機。任何想法我做錯了什麼?

+4

這兩個示例都適用於我。 –

+2

您的計算機是否啓用了防火牆?如果是這樣,它是否允許由Python可執行文件創建的網絡連接? –

+0

有一個防火牆,但我一起工作的其他人使用Python來建立網絡連接。但現在我想到了,他們連接到內部網站......所以也許這是我的問題。 – milnuts

回答

0

問題確實是防火牆。我添加了下面的代碼以使其起作用:

proxy_support = urllib2.ProxyHandler({"http":"http://<proxy>:<port>"}) 
opener = urllib2.build_opener(proxy_support) 
urllib2.install_opener(opener) 

html = urllib2.urlopen(url).read() 
print html