我们正在使用Python数据2.15库的开发人员python指南,并根据app引擎的示例。 createSite(“test site one”,description =“test site one”,source_site =(“https://sites.google.com/feeds/site/googleappsforus.com/google-site-template”))
每次使用时,我们都会收到无法预测的响应。
例外: HTTPException:等待来自网址的HTTP响应时超出截止日期:https://sites.google.com/feeds/site/googleappsforyou.com
有人遇到同样的问题吗? AppEngine或Sites API是否相关?
此致
答案 0 :(得分:33)
等待来自URL 的HTTP响应时超过截止日期实际上是 DeadlineExceededError 。当您发出HTTP请求时,App Engine会将此请求映射到URLFetch。 URLFetch有自己的可配置截止日期。请参阅URLFetch documentation。
您的客户端库似乎捕获DeadlineExceededError并抛出HTTPException。您的客户端库要么将截止日期传递给URLFetch(您需要更改),要么默认截止日期不足以满足您的请求。
尝试设置默认的URLFetch截止日期:
from google.appengine.api import urlfetch
urlfetch.set_default_fetch_deadline(45)
另请务必查看官方文档中的Dealing with DeadlineExceededErrors
请记住,任何最终用户发起的请求必须在60秒内完成,否则将遇到DeadlineExceededError。请参阅App Engine Python Runtime Request Timer。
答案 1 :(得分:7)
在使用最新版本的httplib2
和googleapiclient
时,已接受的解决方案对我不起作用。问题似乎是httplib2.Http
将其超时参数一直传递给urlfetch
。由于默认值为None
,urlfetch
会将该请求的限制设置为5秒,而不管您使用urlfetch.set_default_fetch_deadline
设置的默认值。看来你有几个选择。
第一个选项 - 您可以显式传递httplib2.Http
的实例:
http = httplib2.Http(timeout=30)
...
client.method().execute(http=http)
第二个选项,您可以使用套接字 1 :
设置默认值import socket
socket.setdefaulttimeout(30)
第三个选项,您可以告诉appengine使用套接字来请求 2 。为此,您https://support.microsoft.com/en-us/kb/3071338:
env_variables:
GAE_USE_SOCKETS_HTTPLIB : 'anyvalue'
1 此可能仅适用于付费应用,因为套接字api可能不适用于非付费应用...
2 我几乎可以肯定,这只适用于付费应用,因为套接字api不能用于非付费应用......