我想使用Twitter API制作一个简单的愚蠢推特应用程序。
如果我从浏览器请求此页面,它确实有效:
http://search.twitter.com/search.atom?q=hello&rpp=10&page=1
但如果我使用urllib或urllib2从python请求此页面大多数时候它不起作用:
response = urllib2.urlopen("http://search.twitter.com/search.atom?q=hello&rpp=10&page=1")
我收到此错误:
Traceback (most recent call last):
File "twitter.py", line 24, in <module>
response = urllib2.urlopen("http://search.twitter.com/search.atom?q=hello&rpp=10&page=1")
File "/usr/lib/python2.6/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.6/urllib2.py", line 391, in open
response = self._open(req, data)
File "/usr/lib/python2.6/urllib2.py", line 409, in _open
'_open', req)
File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib/python2.6/urllib2.py", line 1161, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib/python2.6/urllib2.py", line 1136, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno 110] Connection timed out>
为什么??
答案 0 :(得分:2)
代码似乎没问题。
以下工作。
>>> import urllib
>>> import urllib2
>>> user_agent = 'curl/7.21.1 (x86_64-apple-darwin10.4.0) libcurl/7.21.1'
>>> url='http://search.twitter.com/search.atom?q=hello&rpp=10&page=1'
>>> headers = { 'User-Agent' : user_agent }
>>> req = urllib2.Request(url, None, headers)
>>> response = urllib2.urlopen(req)
>>> the_page = response.read()
>>> print the_page
另一个是Twitter实际上无法回应。这种情况经常发生在Twitter上。
答案 1 :(得分:1)
您是否在脚本中的某处更改了默认套接字超时?您的示例代码可靠地为我工作。
它可能是您的互联网连接,或者您可以尝试
import socket
socket.setdefaulttimeout(30)
假设urllib / 2没有覆盖套接字超时。