pkg/utils/httpclient/round_trippper.go (27 lines of code) (raw):
package httpclient
import (
"fmt"
"net/http"
)
type customHeadersRoundTripper struct {
header http.Header
delegatedRoundTripper http.RoundTripper
}
func NewCustomHeadersRoundTripper(header http.Header, rt http.RoundTripper) http.RoundTripper {
return &customHeadersRoundTripper{
header: header,
delegatedRoundTripper: rt,
}
}
var _ http.RoundTripper = &customHeadersRoundTripper{}
func (c *customHeadersRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
for key, values := range c.header {
if req.Header.Get(key) != "" {
return nil, fmt.Errorf("custom header %q can't override other header", key)
}
for _, v := range values {
req.Header.Add(key, v)
}
}
return c.delegatedRoundTripper.RoundTrip(req)
}