gpt4 book ai didi

http - 上下文不超时

转载 作者:行者123 更新时间:2023-12-01 22:36:27 24 4
gpt4 key购买 nike

我试图使用上下文超时来退出长时间运行的http GET请求。对该网址的请求应花费10秒钟以上,但我的请求不会在2秒钟后超时。问题是什么?传递给makeGet()函数的ctx来自http handlefun r.Contex()。

  makeGet(ctx context.Context, url string, respBuffer *bytes.Buffer) (int, error){
req, err := http.NewRequest(http.MethodGet, url, nil)

if err != nil {

return 0, err
}
//
ctx, cancel := context.WithTimeout(ctx, time.Second*2)
defer cancel()

req.WithContext(ctx)
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)

if err != nil {

return 0, err
}
defer resp.Body.Close()
_, err = respBuffer.ReadFrom(resp.Body)
if err != nil {
return resp.StatusCode, err
}

}

最佳答案

在以下评论中总结答案:

原始代码的问题:req.WithContext(ctx)不会根据请求设置上下文,但是会返回一个新的请求,该请求上已设置了上下文。

可以使用新请求通过req = req.WithContext(ctx)执行查询来解决此问题,也可以直接在Client.Do中使用返回值(即Client.Do(req.WithContext(ctx)))来执行查询

关于http - 上下文不超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61882057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com