如何在 golang net/http 中使用传输添加标头信息

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)

Rak*_*esh 5

对于您的特定问题,这可能不是您想要的 - 在您的情况下在请求中设置它更有意义,但是要直接回答您的问题,您应该能够使用以下方法为通过传输的所有请求添加默认标头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 客户端库(或直接访问每个请求对象)使用的客户端时,我发现这很有用,但它允许我传入传输。


Von*_*onC 3

不要将客户端与请求混合。
客户端使用Transport并运行请求:client.Do(req)

http.Request您可以使用以下命令设置标题(h Header) Set(key, value string)

req.Header.Set("name", "value")
Run Code Online (Sandbox Code Playgroud)