in httputil/httputil.go [178:214]
func (client *Client) issueRequest(operation string, url string, headers map[string]string, payload *bytes.Buffer) (int, []byte, error) {
request, err := http.NewRequest(operation, url, nil)
if payload != nil && payload.Len() != 0 {
request, err = http.NewRequest(operation, url, payload)
}
for key, value := range headers {
request.Header.Add(key, value)
}
res, err := client.httpClient.Do(request)
if err == nil && IsSuccessStatusCode(res.StatusCode) {
// no need to retry
} else if err == nil && res != nil {
// there was no error, so look at the status code to retry
for i := 1; client.retryBehavior(res.StatusCode, i); i++ {
res, err = client.httpClient.Do(request)
if err != nil {
break
}
}
}
if err != nil {
return -1, nil, errorhelper.AddStackToError(err)
}
body, err := ioutil.ReadAll(res.Body)
res.Body.Close()
code := res.StatusCode
if err != nil {
return -1, nil, errorhelper.AddStackToError(err)
}
return code, body, nil
}