我想使用Google App Engine在转到响应缓慢的网站上发出HTTP请求。我的代码是:
func request(w http.ResponseWriter, r *http.Request) {
c:=appengine.NewContext(r)
client := urlfetch.Client(c)
resp, err := client.Get("http://www.example.com")
if err != nil {
log.Print("err %s", err.String())
return
}
...}
在致电我的网站后,我收到了这样的错误:
API error 1 (urlfetch: INVALID_URL): ApplicationError: 5 timed out
在查看bi之后,我发现了Transport class的一些引用,它允许等待up to 60 seconds的HTTP请求,但是我找不到任何有关如何使其工作的说明或示例
如何在GAE Go中发出一个截止日期超过5秒的HTTP请求?
答案 0 :(得分:5)
我建议尽可能使用Tasks Queue API在主请求处理程序之外进行urlfetch。
构建urlfetch.Transport时,您应该可以覆盖默认的截止日期:
t := urlfetch.Transport{Context:c, DeadlineSeconds: 5.0}
client := http.Client{Transport: &t}
答案 1 :(得分:0)
由于DNS解析,远程站点有时会很慢。使用IP地址可能有所帮助(在连接到http://a.b.c.d之前解析目标主机)。
我不知道Go是否允许您定义更长的超时值 - 您可以做的是多次轮询,直到您收到回复(或者您的重试次数已过期)。
祝你好运。