rpc: handle HTTP response error codes (#16500)
This commit is contained in:
		
				
					committed by
					
						 Felix Lange
						Felix Lange
					
				
			
			
				
	
			
			
			
						parent
						
							8f8774cf6d
						
					
				
				
					commit
					8feb31825e
				
			
							
								
								
									
										14
									
								
								rpc/http.go
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								rpc/http.go
									
									
									
									
									
								
							| @@ -90,10 +90,19 @@ func DialHTTP(endpoint string) (*Client, error) { | |||||||
| func (c *Client) sendHTTP(ctx context.Context, op *requestOp, msg interface{}) error { | func (c *Client) sendHTTP(ctx context.Context, op *requestOp, msg interface{}) error { | ||||||
| 	hc := c.writeConn.(*httpConn) | 	hc := c.writeConn.(*httpConn) | ||||||
| 	respBody, err := hc.doRequest(ctx, msg) | 	respBody, err := hc.doRequest(ctx, msg) | ||||||
|  | 	if respBody != nil { | ||||||
|  | 		defer respBody.Close() | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		if respBody != nil { | ||||||
|  | 			buf := new(bytes.Buffer) | ||||||
|  | 			if _, err2 := buf.ReadFrom(respBody); err2 == nil { | ||||||
|  | 				return fmt.Errorf("%v %v", err, buf.String()) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	defer respBody.Close() |  | ||||||
| 	var respmsg jsonrpcMessage | 	var respmsg jsonrpcMessage | ||||||
| 	if err := json.NewDecoder(respBody).Decode(&respmsg); err != nil { | 	if err := json.NewDecoder(respBody).Decode(&respmsg); err != nil { | ||||||
| 		return err | 		return err | ||||||
| @@ -132,6 +141,9 @@ func (hc *httpConn) doRequest(ctx context.Context, msg interface{}) (io.ReadClos | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
|  | 	if resp.StatusCode < 200 || resp.StatusCode >= 300 { | ||||||
|  | 		return resp.Body, errors.New(resp.Status) | ||||||
|  | 	} | ||||||
| 	return resp.Body, nil | 	return resp.Body, nil | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user