我想实现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)