Почему этот запрос не работает? - PullRequest
2 голосов
/ 19 октября 2010

Я хочу создать простое глупое приложение для твиттера, используя Twitter API.

Если я запрашиваю эту страницу из моего браузера, она работает:

http://search.twitter.com/search.atom?q=hello&rpp=10&page=1

но если я запрашиваю эту страницу из python, используя urllib или urllib2, в большинстве случаев она не работает:

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>

Почему ??

Ответы [ 2 ]

2 голосов
/ 19 октября 2010

Код кажется нормальным.

Сработало следующее.

>>> 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 это случается слишком часто.

1 голос
/ 19 октября 2010

вы меняли тайм-аут сокета по умолчанию где-то в вашем скрипте? Ваш пример кода работает для меня надежно.

это может быть ваше интернет-соединение, или вы можете попробовать

import socket
socket.setdefaulttimeout(30)

при условии, что urllib / 2 не отменяет время ожидания сокета.

...