我有一个连接到服务器的客户端来读取一些响应。当我使用 Postman 执行请求时,服务器大约需要 5 分钟来响应特定请求。
我正在用 Go 语言编写这个客户端并执行以下代码以设置 10 分钟的超时。
_client := &http.Client{
Timeout: 10 * time.Minute,
}
resp, err := _client.Post(c.Url, "application/json", r)
但是,请求将在 2 分钟后终止并显示错误。错误只是说EOF
.
我尝试将超时设置为 15 秒,以检查配置是否有效,并且请求是否按预期在 15 秒内终止。
如何确保超时为 10 分钟?
我遇到了同样的问题,但我的代码在 GAE 中运行,它在 2 分钟后取消了请求,没有任何操作。因此,如果您完全控制代码的运行位置,您应该能够在客户端中指定超时时间。超时
看这里
以下是在 Go 中设置 HTTP 请求超时的简单方法:
client := &http.Client{Timeout: 10*time.Second}
resp, err := client.Get("https://freshman.tech")
上面的代码片段在 HTTP 客户端上设置 10 秒的超时。因此,如果客户端发出的任何请求未在该时间内完成,则该请求将在 10 秒后超时。
在使用来自请求的响应之前,您可以使用操作系统检查超时错误。IsTimeout(( 方法。它返回一个布尔值,指示是否已知错误以报告发生的超时。
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(url)
if err != nil {
if os.IsTimeout(err) {
// A timeout error occurred
return
}
// This was an error, but not a timeout
}
// use the response
另一种方法涉及使用网络。错误接口以及类型断言,但我更喜欢 os。IsTimeout(( 因为它很简单。
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(url)
if err, ok := err.(net.Error); ok && err.Timeout() {
// A timeout error occurred
} else if err != nil {
// This was an error, but not a timeout
}
这里真正的问题是你以一种实现者不希望你的方式使用HTTP。您可以在此处阅读有关您的问题和解决问题的最佳实践的更多信息。简短的回答是,您最好快速响应客户端,说作业正在与 url 一起运行,以便在完成后找到结果。