func()

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
}