連續呼叫期間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中文網其他相關文章!