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

修改http cli

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