为什么从App Engine上的defer
(仅)发出HTTP请求时,看到“超过最后期限” HTTPException?使用urllib2发出请求时,我设置了超时时间(540秒)(请参见下文),但是我的请求在180秒左右超时。使用Cloud SDK和Djangae,该请求可以在本地正常运行。
req = urllib2.Request(
settings.ENDPOINT,
json_data,
{
'Content-Type': 'application/json',
'X-API-KEY': settings.SOME_KEY,
}
)
response = urllib2.urlopen(req, timeout=settings.SOME_TIMEOUT)
更新:
我还尝试通过google.appengine.api.urlfetch
将全局set_default_fetch_deadline
超时设置为540,但没有成功。
答案 0 :(得分:1)
我在代码中始终收到这些警告:
/base/data/home/apps/s~my-project-id/version-id/lib/urllib3/contrib/appengine.py:256: AppEnginePlatformWarning:URLFetch不支持粒度超时 设置,恢复为总的或默认的URLFetch超时。
urllib2
可能遇到相同的问题,但根本不会像urllib3
那样记录警告
编辑:
我刚刚注意到您说您还尝试设置urlfetch的全局超时。 Java文档说
HTTP(S)请求的最长期限为60秒
出于某种原因,python文档中没有此功能,但我的猜测是,无论您将超时设置为什么,都将受到一些内部max-timeout值的限制。
https://cloud.google.com/appengine/docs/standard/java/outbound-requests#request_timeouts