Jam*_*pam 4 go transport net-http
我正在尝试通过创建 Trasport 来控制 keep-alives 会话以重用 tcp 连接。
这是我的代码段,我不确定如何添加用于身份验证的标头信息。
url := "http://localhost:8181/api/v1/resource"
tr := &http.Transport{
DisableKeepAlives: false,
MaxIdleConns: 0,
MaxIdleConnsPerHost: 0,
IdleConnTimeout: time.Second * 10,
}
client := &http.Client{Transport: tr}
resp, err := client.Get(url)
Run Code Online (Sandbox Code Playgroud)
对于您的特定问题,这可能不是您想要的 - 在您的情况下在请求中设置它更有意义,但是要直接回答您的问题,您应该能够使用以下方法为通过传输的所有请求添加默认标头RoundTrip您的传输的自定义方法。
查看https://golang.org/pkg/net/http/#RoundTripper
就像是 :
type CustomTransport struct {
http.RoundTripper
}
func (ct *CustomTransport) RoundTrip(req *http.Request) (*http.Response, error) {
req.Header.Add("header-key", "header-value")
return ct.RoundTripper.RoundTrip(req)
}
url := "http://localhost:8181/api/v1/resource"
tr := &CustomTransport{
DisableKeepAlives: false,
MaxIdleConns: 0,
MaxIdleConnsPerHost: 0,
IdleConnTimeout: time.Second * 10,
}
client := &http.Client{Transport: tr}
resp, err := client.Get(url)
Run Code Online (Sandbox Code Playgroud)
当我无法直接访问httpAPI 客户端库(或直接访问每个请求对象)使用的客户端时,我发现这很有用,但它允许我传入传输。
不要将客户端与请求混合。
客户端使用Transport并运行请求:client.Do(req)
http.Request您可以使用以下命令设置标题(h Header) Set(key, value string):
req.Header.Set("name", "value")
Run Code Online (Sandbox Code Playgroud)