首页  >  文章  >  后端开发  >  GoLang 的 `http.DefaultClient.Do(req)` 是否会在服务器不可用时自动重试 HTTP 请求?

GoLang 的 `http.DefaultClient.Do(req)` 是否会在服务器不可用时自动重试 HTTP 请求?

Patricia Arquette
Patricia Arquette原创
2024-10-30 14:34:50900浏览

Does GoLang's `http.DefaultClient.Do(req)` Automatically Retry HTTP Requests on Server Unavailability?

HTTP 请求重试机制

问题:

在 GoLang 中,执行 http.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中文网其他相关文章!

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