小编Hyo*_*ori的帖子

Go中如何自定义http.Client或http.Transport超时重试?

我想实现http.Transport标准的自定义http.Client,如果客户端超时,它将自动重试。

PS 出于某种原因,定制http.Transport必须具备的。我已经检查过hashcorp/go-retryablehttp,但是它不允许我使用我自己的http.Transport.

这是我的尝试,自定义组件:

type CustomTransport struct {
    http.RoundTripper
    // ... private fields
}

func NewCustomTransport(upstream *http.Transport) *CustomTransport {
    upstream.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
    // ... other customizations for transport
    return &CustomTransport{upstream}
}

func (ct *CustomTransport) RoundTrip(req *http.Request) (resp *http.Response, err error) {
    req.Header.Set("Secret", "Blah blah blah")
    // ... other customizations for each request

    for i := 1; i <= 5; i++ {
        resp, err = ct.RoundTripper.RoundTrip(req)
        if errors.Is(err, …
Run Code Online (Sandbox Code Playgroud)

error-handling timeout http go retry-logic

6
推荐指数
1
解决办法
7417
查看次数

标签 统计

error-handling ×1

go ×1

http ×1

retry-logic ×1

timeout ×1