HTTPException: крайний срок превышен при ожидании ответа HTTP от URL
У меня есть этот код в верхней части моей программы Google App Engine:
from google.appengine.api import urlfetch
urlfetch.set_default_fetch_deadline(60)
Я использую открывалку для загрузки материала:
cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor( cj ) )
opener.addheaders = [ ( 'User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64)' ) ]
resp = opener.open( 'http://www.example.com/' )
исключение выдается через 5 секунд:
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 404, in open
response = self._open(req, data)
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 422, in _open
'_open', req)
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 382, in _call_chain
result = func(*args)
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 1222, in https_open
return self.do_open(httplib.HTTPSConnection, req)
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 1187, in do_open
r = h.getresponse(buffering=True)
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/gae_override/httplib.py", line 524, in getresponse
raise HTTPException(str(e))
HTTPException: Deadline exceeded while waiting for HTTP response from URL: http://www.example.com
Как я могу избежать ошибки?
2 ответа
Вы пытались установить время ожидания на .open()
вызов?
resp = opener.open('http://example.com', None, 60)
Если вы достигли тайм-аута, как указано set_default_fetch_deadline
Питон бросит DownloadError
или же DeadlineExceededErrors
исключение: https://cloud.google.com/appengine/docs/python/urlfetch/exceptions
Вы также можете исправить библиотеку httplib2 и установить срок до 60 секунд.
httplib2/__init__.py:
def fixed_fetch(url, payload=None, method="GET", headers={},
allow_truncated=False, follow_redirects=True,
deadline=60):
return fetch(url, payload=payload, method=method, headers=headers,
allow_truncated=allow_truncated,
follow_redirects=follow_redirects, deadline=60,
validate_certificate=validate_certificate)
return fixed_fetch
Это работа вокруг.