根据官方文档,如果从任务发出,则通过Google App Engine上的URLFetch发出的http请求超时为10分钟:
https://developers.google.com/appengine/docs/java/urlfetch/overview#Quotas_and_Limits
不幸的是,无论什么
,我都会遇到250秒(4分10秒)的超时我已经设置了在Apache上运行的简单的php测试脚本(但我也用Lighttpd测试过),我正在从GAE调用,等待300秒然后返回
Http hook:
echo "Starting to wait\n";
$waited = 0;
while($waited < 300) {
sleep(5);
$waited += 5;
echo "Waited so far $waited seconds\n";
}
echo "all done\n";
约250秒后呼叫始终失败,并在GAE日志中抛出以下错误
IOException : Could not fetch URL ...
甚至不是与超时相关的异常
另一方面,Web服务器使用http返回码200
记录成功的呼叫我用来拨打电话的Java代码如下
HTTPRequest httpReq = new HTTPRequest(new URL(http://example.com/very-slow.php), HTTPMethod.GET, FetchOptions.Builder.allowTruncate().doNotValidateCertificate().setDeadline(3600d));
HTTPResponse resp = null;
try {
Future<HTTPResponse> futureResp = urlService.fetchAsync(httpReq);
log.info("Aync Call request lodged, waiting for a response");
resp = futureResp.get();
log.info("Aync Call completed");
} catch(Throwable th) {
log.warning("URLFetch execution error: " + th.getMessage());
}
我尝试过使用setDeadline方法来指定各种不同的值而没有太多运气。如果我指定的值低于250秒,则使用它并抛出超时异常。忽略250秒以上的任何内容,而是抛出通用的IOException。
我很确定这看起来像是一个GAE错误,在查看谷歌代码上的错误列表后,我惊恐地发现有多少未解决的错误正在等待多年......
Google App Engine在此阶段非常失望......