使用urllib2.urlopen()函数时出现DeadlineExceededError:ApplicationError:5

2024-06-28 11:52:53 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的应用程序中,我使用urllib2.urlopen()函数调用api并从中获取结果api。但是这不管用好吧。有时候它会显示结果,但有时会出现以下错误:

Traceback (most recent call last):
  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 700, in __call__
handler.get(*groups)
  File "/base/data/home/apps/s~malware-app/7.351334968546050391/main.py", line 505, in get
f = urllib2.urlopen('http://whoapi.com/api-v1/?domain=%s&rtype=alexarank&apikey=xyz'% domain)
  File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 124, in urlopen
    return _opener.open(url, data)
  File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 381, in open
response = self._open(req, data)
  File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 399, in _open
  '_open', req)
  File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 360, in _call_chain
result = func(*args)
  File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 1114, in http_open
return self.do_open(httplib.HTTPConnection, req)
  File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 1087, in do_open
r = h.getresponse()
  File "/base/python_runtime/python_dist/lib/python2.5/httplib.py", line 197, in getresponse
self._allow_truncated, self._follow_redirects)
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/urlfetch.py", line 260, in fetch
return rpc.get_result()
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 592, in get_result
return self.__get_result_hook(self)
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/urlfetch.py", line 364, in _get_fetch_result
raise DeadlineExceededError(str(err))
DeadlineExceededError: ApplicationError: 5 

我看到了try except方法,但它对我的代码不起作用。 我的代码块:

^{pr2}$

我正在导入:

from google.appengine.runtime import DeadlineExceededError

从stackoverflow我得到它的b因为服务器在指定的时间内没有响应,我们可以处理这个异常..am但是不能这样做。 任何帮助都将不胜感激。 谢谢你的帮助


Tags: inpyselfapibasegetlibdist
2条回答

URL获取请求的默认超时只有5秒,因此您可能希望通过直接使用urlfetch来增加超时:

from google.appengine.api import urlfetch

try:
    resp = urlfetch.fetch('http://whoapi.com/api-v1/?domain=%s&rtype=serverip&apikey=xyzxyz'% domain, method=urlfetch.GET, deadline=10)
    ip = r.content
except urlfetch.DownloadError:
    self.redirect('/error')

如果您始终发现超出了它,请考虑使用asynchronous requests或将逻辑移动到任务队列。

正如您所说,发生错误是因为您没有及时得到响应,并且请求超过了截止日期。在

您可以将请求移动到任务队列中,因为任务可以运行更长时间。在

至于捕捉异常,你有没有试着在后面加一个return语句自我重定向?在

相关问题 更多 >