1

我正在尝试遵循此线程的建议,但它不起作用。在这一点上,我只想执行一个非常简单的测试,以确保我实际上得到了从我试图打开的站点返回的数据。对于我的简单测试,我试图打开 Yahoo 天气 api。我已经验证在网络浏览器中输入这个地址确实会返回数据。我已经尝试了这两个代码片段,但都没有工作。

import urllib

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

这个例子直接来自 Python 网站。这死于:

IOError:[Errno 套接字错误] [Errno 110] 连接超时

我也尝试过像这样使用httplib:

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

尝试这样做会给我以下错误:

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

看来我从来没有连接到远程主机。任何想法我做错了什么?

4

1 回答 1

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
于 2013-08-07T15:59:35.490 回答