HTTP 請求重試機制
問題:
在GoLangang 中,執行GoLang DefaultClient 時.Do(req),如果伺服器暫時不可用,HTTP請求嘗試是否會自動重試?
答案:
否,GoLang HTTP客戶端沒有實現自動重試重試。您需要實作自訂重試機制來處理伺服器不可用的情況。
重試模式實現:
以下是您可以實現的基本重試模式的範例:
<code class="go">package main import ( "fmt" "io/ioutil" "log" "net/http" ) func main() { var ( err error response *http.Response retries int = 3 ) for retries > 0 { response, err = http.Get("https://non-existent") // Replace with your server URL if err != nil { log.Println("Request failed", err) retries -= 1 } else { break // Request succeeded, exit the retry loop } } if response != nil { defer response.Body.Close() data, err := ioutil.ReadAll(response.Body) if err != nil { log.Fatal(err) } fmt.Printf("Data received: %s", data) } else { log.Fatal("Unable to establish connection") } }</code>
在此範例中, http.Get 請求在循環中執行,嘗試從伺服器取得資料。如果請求失敗,循環將減少重試計數並繼續,直到所有重試都用盡或請求成功。如果請求成功,則列印回應。如果所有重試都失敗,則會記錄錯誤訊息。
以上是GoLang 的 `http.DefaultClient.Do(req)` 是否會在伺服器無法使用時自動重試 HTTP 請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!