in pkg/rest/client.go [93:150]
func (client *URLClient) HTTPDoWithContext(ctx context.Context, method string, rawURL string, headers http.Header, body []byte) (resp *http.Response, err error) {
if strings.HasPrefix(rawURL, "https") {
if transport, ok := client.Client.Transport.(*http.Transport); ok {
transport.TLSClientConfig = client.TLS
}
}
if headers == nil {
headers = make(http.Header)
}
if _, ok := headers[HeaderHost]; !ok {
parsedURL, err := url.Parse(rawURL)
if err != nil {
return nil, err
}
headers.Set(HeaderHost, parsedURL.Host)
}
if _, ok := headers[HeaderAccept]; !ok {
headers.Set(HeaderAccept, AcceptAny)
}
if _, ok := headers[HeaderAcceptEncoding]; !ok && client.Cfg.Compressed {
headers.Set(HeaderAcceptEncoding, "deflate, gzip")
}
req, err := http.NewRequest(method, rawURL, bytes.NewBuffer(body))
if err != nil {
return nil, fmt.Errorf("create request failed: %s", err.Error())
}
req = req.WithContext(ctx)
req.Header = headers
DumpRequestOut(req)
resp, err = client.Client.Do(req)
if err != nil {
return nil, err
}
DumpResponse(resp)
switch resp.Header.Get(HeaderContentEncoding) {
case "gzip":
reader, err := NewGZipBodyReader(resp.Body)
if err != nil {
_, err = io.Copy(io.Discard, resp.Body)
if err != nil {
log.Error("", err)
resp.Body.Close()
return nil, err
}
resp.Body.Close()
return nil, err
}
resp.Body = reader
}
return resp, nil
}