internal: read response body on error

This commit is contained in:
Simon Ser 2020-02-12 19:46:05 +01:00
parent a892cc58df
commit 30eac28d2b
No known key found for this signature in database
GPG Key ID: 0FDE7BE0E88F5E48

View File

@ -77,9 +77,21 @@ func (c *Client) Do(req *http.Request) (*http.Response, error) {
return nil, err return nil, err
} }
if resp.StatusCode/100 != 2 { if resp.StatusCode/100 != 2 {
var wrappedErr error
if strings.HasPrefix(resp.Header.Get("Content-Type"), "text/") {
// TODO: if body is plaintext, read it and populate the error message // TODO: if body is plaintext, read it and populate the error message
lr := io.LimitedReader{R: resp.Body, N: 1024}
var buf bytes.Buffer
io.Copy(&buf, &lr)
resp.Body.Close() resp.Body.Close()
return nil, &HTTPError{Code: resp.StatusCode} if s := strings.TrimSpace(buf.String()); s != "" {
if lr.N == 0 {
s += " […]"
}
wrappedErr = fmt.Errorf("%v", s)
}
}
return nil, &HTTPError{Code: resp.StatusCode, Err: wrappedErr}
} }
return resp, nil return resp, nil
} }