【问题标题】:Go HTTP Request timeoutGo HTTP 请求超时
【发布时间】:2017-03-17 14:46:28
【问题描述】:

我有一个客户端连接到服务器以读取一些响应。当我使用 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 分钟?

【问题讨论】:

  • 究竟是什么错误?
  • 可能重复:How to set timeout for http.Get() requests in Golang?;和HTTP client, idle timeout。他们能解决你的问题吗?
  • @KashifNazar:EOF 表示服务器出于某种原因关闭了连接。你确定你已经写了完整的请求吗? r 是否有效,还是只是阻塞了请求正文?
  • @kashif 问题不在您的端,而是在您的服务器端。您的服务器没有很好地处理文件操作,因此您得到 EOF

标签: go timeout http-post


【解决方案1】:

我遇到了同样的问题,但是我的代码在 GAE 中运行,它在 2 分钟后取消了请求,没有任何操作。因此,如果您可以完全控制代码的运行位置,您应该能够在 client.Timeout 中指定超时时间

See here

【讨论】:

    【解决方案2】:

    这里真正的问题是您以一种实施者不希望您使用的方式使用 HTTP。您可以阅读更多关于您的问题以及解决问题的最佳实践here。简短的回答是,您最好快速响应客户端说作业正在运行以及 url 以在完成时找到结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-05
      • 2010-12-12
      • 2014-04-25
      • 1970-01-01
      • 2020-03-16
      • 2021-04-16
      • 2013-12-18
      相关资源
      最近更新 更多