diff --git a/net/ghttp/ghttp_client_dump.go b/net/ghttp/ghttp_client_dump.go index 642f3fc73..4844fb801 100644 --- a/net/ghttp/ghttp_client_dump.go +++ b/net/ghttp/ghttp_client_dump.go @@ -18,22 +18,12 @@ import ( // dumpTextFormat is the format of the dumped raw string const dumpTextFormat = `+---------------------------------------------+ -| %s | +| %s | +---------------------------------------------+ %s %s ` -// getRequestBody returns the raw text of the request body. -func getRequestBody(req *http.Request) string { - if req.Body == nil { - return "" - } - bodyContent, _ := ioutil.ReadAll(req.Body) - req.Body = utils.NewReadCloser(bodyContent, true) - return gconv.UnsafeBytesToStr(bodyContent) -} - // getResponseBody returns the text of the response body. func getResponseBody(res *http.Response) string { if res.Body == nil { @@ -60,9 +50,9 @@ func (r *ClientResponse) RawRequest() string { } return fmt.Sprintf( dumpTextFormat, - "REQUEST ", + "REQUEST", gconv.UnsafeBytesToStr(bs), - getRequestBody(r.request), + r.requestBody, ) } diff --git a/net/ghttp/ghttp_client_request.go b/net/ghttp/ghttp_client_request.go index e37a6c684..043db2f43 100644 --- a/net/ghttp/ghttp_client_request.go +++ b/net/ghttp/ghttp_client_request.go @@ -223,10 +223,8 @@ func (c *Client) DoRequest(method, url string, data ...interface{}) (resp *Clien // The request body can be reused for dumping // raw HTTP request-response procedure. reqBodyContent, _ := ioutil.ReadAll(req.Body) + resp.requestBody = reqBodyContent req.Body = utils.NewReadCloser(reqBodyContent, false) - defer func() { - resp.request.Body = utils.NewReadCloser(reqBodyContent, true) - }() for { if resp.Response, err = c.Do(req); err != nil { if c.retryCount > 0 { diff --git a/net/ghttp/ghttp_client_response.go b/net/ghttp/ghttp_client_response.go index 86ea687d4..a1c391b4a 100644 --- a/net/ghttp/ghttp_client_response.go +++ b/net/ghttp/ghttp_client_response.go @@ -16,8 +16,9 @@ import ( // ClientResponse is the struct for client request response. type ClientResponse struct { *http.Response - request *http.Request - cookies map[string]string + request *http.Request + requestBody []byte + cookies map[string]string } // initCookie initializes the cookie map attribute of ClientResponse.