如何在 Golang 中为 http.Get() 请求设置超时?

新手上路,请多包涵

我正在 Go 中制作一个 URL 获取器,并有一个要获取的 URL 列表。我向每个 URL 发送 http.Get() 请求并获得它们的响应。

 resp,fetch_err := http.Get(url)

如何为每个 Get 请求设置自定义超时? (默认时间很长,这让我的 fetcher 真的很慢。)我希望我的 fetcher 有大约 40-45 秒的超时,之后它应该返回“请求超时”并转到下一个 URL。

我怎样才能做到这一点?

原文由 pymd 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 997
2 个回答

显然在 Go 1.3 http.Client 中有超时字段

client := http.Client{
    Timeout: 5 * time.Second,
}
client.Get(url)

这对我来说已经成功了。

原文由 sparrovv 发布,翻译遵循 CC BY-SA 4.0 许可协议

您需要使用自己的 Transport 设置自己的 ClientTransport 使用自定义 Dial 函数,该函数环绕 DialTimeout

像(完全 _未经测试_) 这样 的东西:

 var timeout = time.Duration(2 * time.Second)

func dialTimeout(network, addr string) (net.Conn, error) {
    return net.DialTimeout(network, addr, timeout)
}

func main() {
    transport := http.Transport{
        Dial: dialTimeout,
    }

    client := http.Client{
        Transport: &transport,
    }

    resp, err := client.Get("http://some.url")
}

原文由 Volker 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题