From 42df548958678f32ae8db4af8708124f63085b98 Mon Sep 17 00:00:00 2001 From: bxd <2216403312@qq.com> Date: Fri, 8 Dec 2023 13:30:00 +0800 Subject: [PATCH] sync --- body.go | 24 +++++++++++------------- headers.go | 11 +++++++++-- option.go | 34 +++++++++++++++++++++++++--------- 3 files changed, 45 insertions(+), 24 deletions(-) diff --git a/body.go b/body.go index c226e3e..d376ddb 100644 --- a/body.go +++ b/body.go @@ -263,23 +263,21 @@ func any2Map(val any) map[string]any { } func (obj *RequestOption) newBody(val any, valType int) (reader io.Reader, parseOrderMap *orderMap, orderKey []string, err error) { - if reader, ok := val.(io.Reader); ok { + switch value := val.(type) { + case io.Reader: obj.once = true - return reader, nil, nil, nil + return value, nil, nil, nil + case string: + return bytes.NewReader(tools.StringToBytes(value)), nil, nil, nil + case []byte: + return bytes.NewReader(value), nil, nil, nil } if valType == readType { - switch value := val.(type) { - case string: - return bytes.NewReader(tools.StringToBytes(value)), nil, nil, nil - case []byte: - return bytes.NewReader(value), nil, nil, nil - default: - enData, err := gson.Encode(value) - if err != nil { - return nil, nil, nil, err - } - return bytes.NewReader(enData), nil, nil, nil + enData, err := gson.Encode(val) + if err != nil { + return nil, nil, nil, err } + return bytes.NewReader(enData), nil, nil, nil } if mapData := any2Map(val); mapData != nil { val = mapData diff --git a/headers.go b/headers.go index 2cfb848..9d7a9fd 100644 --- a/headers.go +++ b/headers.go @@ -1,6 +1,7 @@ package requests import ( + "errors" "net/http" ) @@ -20,10 +21,16 @@ func (obj *RequestOption) initHeaders() (http.Header, error) { case http.Header: return headers.Clone(), nil default: - _, dataMap, _, err := obj.newBody(headers, mapType) - if dataMap == nil || err != nil { + body, dataMap, _, err := obj.newBody(headers, mapType) + if err != nil { return nil, err } + if body != nil { + return nil, errors.New("headers type error") + } + if dataMap == nil { + return nil, nil + } head, order := dataMap.parseHeaders() obj.OrderHeaders = order return head, err diff --git a/option.go b/option.go index 2606b37..818a5a3 100644 --- a/option.go +++ b/option.go @@ -2,6 +2,7 @@ package requests import ( "context" + "errors" "io" "net" "net/http" @@ -120,31 +121,43 @@ func (obj *RequestOption) initBody(ctx context.Context) (io.Reader, error) { return body, err } else if obj.Form != nil { var orderMap *orderMap - _, orderMap, _, err := obj.newBody(obj.Form, mapType) + body, orderMap, _, err := obj.newBody(obj.Form, mapType) if err != nil { return nil, err } + if body != nil { + return nil, errors.New("form type error") + } + if orderMap == nil { + return nil, nil + } body, contentType, once, err := orderMap.parseForm(ctx) obj.once = once if obj.ContentType == "" { obj.ContentType = contentType } if body == nil { - return body, nil + return nil, nil } return body, nil } else if obj.Data != nil { - _, orderMap, _, err := obj.newBody(obj.Data, mapType) + body, orderMap, _, err := obj.newBody(obj.Data, mapType) if err != nil { - return nil, err + return body, err } - body := orderMap.parseData() if obj.ContentType == "" { obj.ContentType = "application/x-www-form-urlencoded" } - if body == nil { + if body != nil { return body, nil } + if orderMap == nil { + return nil, nil + } + body = orderMap.parseData() + if body == nil { + return nil, nil + } return body, nil } else if obj.Json != nil { body, _, _, err := obj.newBody(obj.Json, readType) @@ -167,7 +180,7 @@ func (obj *RequestOption) initBody(ctx context.Context) (io.Reader, error) { obj.ContentType = "text/plain" } if body == nil { - return nil, err + return nil, nil } return body, nil } else { @@ -178,9 +191,12 @@ func (obj *RequestOption) initParams() (*url.URL, error) { if obj.Params == nil { return obj.Url, nil } - _, dataMap, _, err := obj.newBody(obj.Params, mapType) + body, dataMap, _, err := obj.newBody(obj.Params, mapType) if err != nil { - return obj.Url, err + return nil, err + } + if body != nil { + return nil, errors.New("params type error") } query := dataMap.parseParams().String() if query == "" {