fix read on close
This commit is contained in:
parent
2182081831
commit
f8df3d1bee
@ -247,7 +247,7 @@ func TestOption_WithRetry(t *testing.T) {
|
||||
}
|
||||
|
||||
retryAmount := 1
|
||||
retryDelay := 200 * time.Millisecond
|
||||
retryDelay := 800 * time.Millisecond
|
||||
startTime := time.Now().UnixNano() / int64(time.Millisecond)
|
||||
|
||||
_ = client.Get(nil, "", WithRetry(retryAmount, retryDelay))
|
||||
|
||||
@ -80,7 +80,13 @@ func (c *Client) customReq(req *BeegoHTTPRequest, opts []BeegoHTTPRequestOption)
|
||||
|
||||
// handleResponse try to parse body to meaningful value
|
||||
func (c *Client) handleResponse(value interface{}, req *BeegoHTTPRequest) error {
|
||||
err := c.handleCarrier(value, req)
|
||||
// make sure req.resp is not nil
|
||||
_, err := req.Bytes()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = c.handleCarrier(value, req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -90,22 +96,17 @@ func (c *Client) handleResponse(value interface{}, req *BeegoHTTPRequest) error
|
||||
|
||||
// handleCarrier set http data to value
|
||||
func (c *Client) handleCarrier(value interface{}, req *BeegoHTTPRequest) error {
|
||||
resp, err := req.Response()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if value == nil {
|
||||
return err
|
||||
return nil
|
||||
}
|
||||
|
||||
if carrier, ok := value.(HTTPResponseCarrier); ok {
|
||||
b, err := req.Bytes()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
resp.Body = ioutil.NopCloser(bytes.NewReader(b))
|
||||
carrier.SetHTTPResponse(resp)
|
||||
req.resp.Body = ioutil.NopCloser(bytes.NewReader(b))
|
||||
carrier.SetHTTPResponse(req.resp)
|
||||
}
|
||||
if carrier, ok := value.(HTTPBodyCarrier); ok {
|
||||
b, err := req.Bytes()
|
||||
@ -123,10 +124,10 @@ func (c *Client) handleCarrier(value interface{}, req *BeegoHTTPRequest) error {
|
||||
carrier.SetBytes(b)
|
||||
}
|
||||
if carrier, ok := value.(HTTPStatusCarrier); ok {
|
||||
carrier.SetStatusCode(resp.StatusCode)
|
||||
carrier.SetStatusCode(req.resp.StatusCode)
|
||||
}
|
||||
if carrier, ok := value.(HTTPHeadersCarrier); ok {
|
||||
carrier.SetHeader(resp.Header)
|
||||
carrier.SetHeader(req.resp.Header)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -662,13 +662,7 @@ func (b *BeegoHTTPRequest) ToValue(value interface{}) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
resp, err := b.Response()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
contentType := strings.Split(resp.Header.Get(contentTypeKey), ";")[0]
|
||||
contentType := strings.Split(b.resp.Header.Get(contentTypeKey), ";")[0]
|
||||
// try to parse it as content type
|
||||
switch contentType {
|
||||
case "application/json":
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user