如何从http.Client添加默认标题字段

时间:2018-08-01 08:33:03

标签: go

我希望http.Client为所有请求添加其他标头。

type MyClient struct {
    http.Client
}

func (c *MyClient) Do(req *http.Request) (*http.Response, error) {
    req.Header.Add("User-Agent", "go")
    return c.Client.Do(req)
}
如果我呼叫使用func Do的{​​{1}},则不会呼叫

func PostForm。如果没有办法模仿OOP,该如何最轻松地做到呢?

1 个答案:

答案 0 :(得分:3)

http.Client的字段Transport的类型为RoundTripper-接口类型。

它为我们提供了更改请求(当然还有响应)的选项。

您可以创建一个包装另一个RoundTripper的自定义类型,并将标头添加到该自定义类型的RoundTrip中:

type AddHeaderTransport struct{
    T http.RoundTripper
}

func (adt *AddHeaderTransport) RoundTrip(req *http.Request) (*http.Response,error) {
    req.Header.Add("User-Agent", "go")
    return adt.T.RoundTrip(req)
}

操场上的完整代码:https://play.golang.org/p/FbkpFlyFCm_F