in witai.go [63:101]
func (c *Client) request(method, url string, ct string, body io.Reader) (io.ReadCloser, error) {
req, err := http.NewRequest(method, c.APIBase+url, body)
if err != nil {
return nil, err
}
req.Header.Set("Authorization", c.headerAuth)
req.Header.Set("Accept", c.headerAccept)
req.Header.Set("Content-Type", ct)
resp, err := c.httpClient.Do(req)
if err != nil {
return nil, err
}
if resp.StatusCode >= http.StatusBadRequest {
defer resp.Body.Close()
var e *errorResp
decoder := json.NewDecoder(resp.Body)
err = decoder.Decode(&e)
if err != nil {
return nil, fmt.Errorf("unable to decode error message: %s", err.Error())
}
// Wit.ai errors sometimes have "error", sometimes "body" message
if len(e.Error) > 0 {
return nil, fmt.Errorf("unable to make a request. error: %s", e.Error)
}
if len(e.Body) > 0 {
return nil, fmt.Errorf("unable to make a request. error: %s", e.Body)
}
return nil, fmt.Errorf("unable to make a request. error: %v", e)
}
return resp.Body, nil
}