无法在Python 2.7中使用urlopen来工作

时间:2013-08-06 21:31:52

标签: python python-2.7 urllib httplib

我正在尝试遵循this thread的建议,但它不起作用。在这一点上,我只是想进行一个非常简单的测试,以确保我实际上从我试图打开的网站返回数据。对于我的简单测试,我试图打开雅虎天气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'

似乎我没有连接到远程主机。我有什么想法吗?

1 个答案:

答案 0 :(得分: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