连续调用期间 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中文网其他相关文章!