首页 >后端开发 >Golang >为什么连续的 Golang HTTP 请求会导致意外的 EOF 错误?

为什么连续的 Golang HTTP 请求会导致意外的 EOF 错误?

DDD
DDD原创
2024-12-15 22:15:13579浏览

Why Do Successive Golang HTTP Requests Result in Unexpected EOF Errors?

连续调用期间 Golang HTTP 请求中出现意外的 EOF 错误

尝试解决使用标准 net/http 包时遇到的异常错误,用户在发出多个 HTTP 请求时报告间歇性 EOF(文件结束)异常

用户提供的代码片段包含GET和PUT请求的测试函数,执行过程中偶发错误。

问题排查

分析代码后发现根本原因与请求处理不当有关。具体来说,Req.Close 字段未显式设置为 true。

在提供的代码中,使用 defer resp.Body.Close() 语法来处理响应正文关闭。然而,这被证明是不够的,并且需要将 Req.Close 设置为 true 以确保正确的请求处理。

更新的代码

以下代码片段演示了如何正确设置Req.Close:

client := &http.Client{}
req, err := http.NewRequest(method, url, httpBody)

// **NOTE** this !!
req.Close = true

req.Header.Set("Content-Type", "application/json")
req.SetBasicAuth("user", "pass")
resp, err := client.Do(req)
if err != nil {
    // whatever
}
defer resp.Body.Close()

response, err = ioutil.ReadAll(resp.Body)
if err != nil {
    // Whatever
}

解决方案

将Req.Close设置为true可以有效保证HTTP请求正确关闭,防止出现EOF错误。通过实施此更改,用户的测试函数在发出多个请求时始终通过,解决了问题。

以上是为什么连续的 Golang HTTP 请求会导致意外的 EOF 错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn