in hugegraph-client-go/hgtransport/hgtransport.go [105:152]
func (c *Client) Perform(req *http.Request) (*http.Response, error) {
u := c.url
c.setURL(u, req)
c.setUserAgent(req)
c.setHost(req)
c.setContentTypeJSON(req)
if _, ok := req.Header["Authorization"]; !ok {
c.setBasicAuth(u, req)
}
var dupReqBody *bytes.Buffer
if c.logger != nil && c.logger.RequestBodyEnabled() {
if req.Body != nil && req.Body != http.NoBody {
dupReqBody = bytes.NewBuffer(make([]byte, 0, int(req.ContentLength)))
dupReqBody.ReadFrom(req.Body)
req.Body = ioutil.NopCloser(bytes.NewBuffer(dupReqBody.Bytes()))
}
}
start := time.Now().UTC()
res, err := c.transport.RoundTrip(req)
dur := time.Since(start)
if c.logger == nil {
return res, err
}
var dupRes http.Response
if res != nil {
dupRes = *res
}
if c.logger.RequestBodyEnabled() {
if req.Body != nil && req.Body != http.NoBody {
req.Body = ioutil.NopCloser(dupReqBody)
}
}
if c.logger.ResponseBodyEnabled() {
if res != nil && res.Body != nil && res.Body != http.NoBody {
b1, b2, _ := duplicateBody(res.Body)
dupRes.Body = b1
res.Body = b2
}
}
c.logger.LogRoundTrip(req, &dupRes, err, start, dur) // errcheck exclude
return res, err
}