This may not be what you want for your specific question - setting it in the request makes more sense in your case, but to answer your question directly, you should be able to add a default header to all the requests going through the transport by using a custom RoundTrip
method for your Transport.
Check out https://golang.org/pkg/net/http/#RoundTripper
Something like :
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)
I found this useful when I didn't have direct access to the http
Client used by an API client library (or each request object directly), but it allowed me to pass in a transport.
*http.Request
. The default for DisableKeepAlives is false, which means connections will be reused whenever possible . – CongressDisableKeepAlives
is false by default. – DelisadelisleDefaultTransport
, you should still make sure you copy all the important settings, i.e. you almost always want a DialContext with a Timeout. (and your first 3 fields are the zero value, so setting those doesn't do anything) – Congress