我希望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,该如何最轻松地做到呢?
答案 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)
}