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