提交 e6cea0cb authored 作者: mooncake9527's avatar mooncake9527

修改http cli

上级 a24f8839
......@@ -31,7 +31,6 @@ type Request struct {
timeout time.Duration // Client timeout
retryCount uint
rspBody []byte
request *http.Request
response *Response
err error
......@@ -39,7 +38,7 @@ type Request struct {
// Response HTTP response
type Response struct {
//Body io.ReadCloser
body []byte
StatusCode int
Status string
Header http.Header
......@@ -62,7 +61,6 @@ func (req *Request) Reset() {
req.timeout = 0
req.headers = nil
req.request = nil
req.response = nil
req.method = ""
req.err = nil
......@@ -238,7 +236,8 @@ func (req *Request) push(ctx context.Context) {
func (req *Request) send(ctx context.Context) {
bodyBuf := bytes.NewBuffer(req.reqBody)
req.request, req.err = http.NewRequest(req.method, req.url, bodyBuf)
var request *http.Request
request, req.err = http.NewRequest(req.method, req.url, bodyBuf)
if req.err != nil {
return
}
......@@ -249,10 +248,10 @@ func (req *Request) send(ctx context.Context) {
}
if req.headers != nil {
for k, v := range req.headers {
req.request.Header.Add(k, v)
request.Header.Add(k, v)
}
}
req.request.Header.Add(ctxUtils.HeaderXRequestIDKey, ctxUtils.CtxRequestID(ctx))
request.Header.Add(ctxUtils.HeaderXRequestIDKey, ctxUtils.CtxRequestID(ctx))
if req.timeout < 1 {
req.timeout = defaultTimeout
}
......@@ -260,10 +259,12 @@ func (req *Request) send(ctx context.Context) {
logger.Info("[httpCli] req",
logger.Any("method", req.method),
logger.Any("url", req.url),
logger.Any("header", req.request.Header),
logger.Any("header", request.Header),
logger.Any("body", bodyBuf.String()),
ctxUtils.CtxTraceIDField(ctx))
req.request = request
if req.retryCount > 0 {
_ = retry.Retry(func() error {
req.pushDo(ctx)
......@@ -281,8 +282,8 @@ func (req *Request) send(ctx context.Context) {
var rspBodyStr string
if req.response != nil {
rspHeader = req.response.Header
if len(req.rspBody) > 0 {
rspBodyStr = bytes.NewBuffer(req.rspBody).String()
if len(req.response.body) > 0 {
rspBodyStr = bytes.NewBuffer(req.response.body).String()
}
}
logger.Info("[httpCli] rsp",
......@@ -300,6 +301,7 @@ func (req *Request) pushDo(ctx context.Context) {
defer cancel()
response, e := client.Do(req.request)
if e != nil {
req.request = nil
req.err = e
return
}
......@@ -310,18 +312,20 @@ func (req *Request) pushDo(ctx context.Context) {
req.response.StatusCode = response.StatusCode
if response.Body != nil {
defer response.Body.Close()
req.rspBody, req.err = io.ReadAll(response.Body)
req.response.body, req.err = io.ReadAll(response.Body)
if req.err != nil {
req.request = nil
return
}
if len(req.rspBody) > 0 {
if len(req.response.body) > 0 {
if c, _ := ctxUtils.GetGinCtx(ctx); c != nil {
entity.SetCopyApiRsp(c, bytes.NewBuffer(req.rspBody))
entity.SetCopyApiRsp(c, bytes.NewBuffer(req.response.body))
}
//req.response.Body = io.NopCloser(bytes.NewBuffer(req.rspBody))
}
}
}
req.request = nil
}
// ----------------------------------- Response -----------------------------------
......@@ -332,10 +336,10 @@ func (req *Request) Err() error {
// BodyString returns the body data of the HttpResponse
func (req *Request) BodyString() string {
if len(req.rspBody) == 0 {
if len(req.response.body) == 0 {
return ""
}
return string(req.rspBody)
return string(req.response.body)
}
func (req *Request) ReadRspBody() ([]byte, error) {
......@@ -343,11 +347,11 @@ func (req *Request) ReadRspBody() ([]byte, error) {
return []byte{}, req.err
}
if req.rspBody == nil {
if req.response.body == nil {
return []byte{}, errors.New("nil")
}
return req.rspBody, nil
return req.response.body, nil
}
// BindJSON parses the response's body as JSON
......@@ -355,7 +359,7 @@ func (req *Request) BindJSON(v interface{}) *Request {
if req.err != nil {
return req
}
if err := json.Unmarshal(req.rspBody, v); err != nil {
if err := json.Unmarshal(req.response.body, v); err != nil {
req.err = err
}
return req
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论