Ensure that we return the correct error code even if we can't read the body
This commit is contained in:
		
							
								
								
									
										18
									
								
								client.go
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								client.go
									
									
									
									
									
								
							@@ -69,13 +69,16 @@ func (c Client) do(req *http.Request, i interface{}) error {
 | 
			
		||||
	}
 | 
			
		||||
	defer getResp.Body.Close()
 | 
			
		||||
 | 
			
		||||
	bytes, err := ioutil.ReadAll(getResp.Body)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Check Status Code is 1XX or 2XX
 | 
			
		||||
	if getResp.StatusCode/100 > 2 {
 | 
			
		||||
		bytes, err := ioutil.ReadAll(getResp.Body)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			// We couldn't read the output.  Oh well; generate the appropriate error type anyway.
 | 
			
		||||
			return &Meta{
 | 
			
		||||
				Code: HTTPStatusCode(getResp.StatusCode),
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		resp := newJSONResponse(nil)
 | 
			
		||||
		if err := json.Unmarshal(bytes, &resp); err != nil {
 | 
			
		||||
			// We couldn't parse the output.  Oh well; generate the appropriate error type anyway.
 | 
			
		||||
@@ -90,6 +93,11 @@ func (c Client) do(req *http.Request, i interface{}) error {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	bytes, err := ioutil.ReadAll(getResp.Body)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	resp := newJSONResponse(i)
 | 
			
		||||
	if err := json.Unmarshal(bytes, &resp); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user