Python 为什么这个请求没有';不行?

Python 为什么这个请求没有';不行?,python,urllib2,Python,Urllib2,我想用twitter API制作一个简单愚蠢的twitter应用程序 如果我从我的浏览器请求此页面,它将正常工作: 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

我想用twitter API制作一个简单愚蠢的twitter应用程序

如果我从我的浏览器请求此页面,它将正常工作:

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>
回溯(最近一次呼叫最后一次):
文件“twitter.py”,第24行,在
响应=urllib2.urlopen(“http://search.twitter.com/search.atom?q=hello&rpp=10&page=1")
文件“/usr/lib/python2.6/urllib2.py”,第126行,在urlopen中
return\u opener.open(url、数据、超时)
文件“/usr/lib/python2.6/urllib2.py”,第391行,打开
响应=自身打开(请求,数据)
文件“/usr/lib/python2.6/urllib2.py”,第409行,打开
"开放",
文件“/usr/lib/python2.6/urllib2.py”,第369行,在调用链中
结果=func(*args)
文件“/usr/lib/python2.6/urllib2.py”,第1161行,在http\u open中
返回self.do_open(httplib.HTTPConnection,req)
文件“/usr/lib/python2.6/urllib2.py”,第1136行,打开
引发URL错误(err)
urllib2.URLError:

为什么???

您在脚本中的某个地方更改了默认套接字超时?您的示例代码对我来说工作可靠

它可能是你的互联网连接,或者你可以尝试

import socket
socket.setdefaulttimeout(30)

假设urllib/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上经常发生。

你坐在代理后面吗?不,我坐在家里的路由器后面:)你安装了curl吗。你能试试吗:curl-v“”。如果超时,则您的浏览器上有一些配置需要调查。不,我没有更改任何内容。有时它对我也有效,但大多数时候不行。请尝试更多次:如果它有时有效,而其他情况下无效,那么问题很可能是错误所说的-您的连接超时。我在循环中运行了100次,但没有一次超时。您可以尝试按说明增加套接字超时,可能会将数字从30更改为更高的值。同样,我不知道urllib2是如何处理超时的。嗯,非常奇怪:(.我已经增加了套接字超时,如您所述(30、50和100),但它仍然不起作用:(