From f14401a39fe7615cf04b5f384731fb81624f2c10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Mon, 31 Mar 2025 12:24:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E6=B3=A2=E4=B8=8D?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- httpclient/resty.go | 29 ++++++++++++++++++++++----- httpclient/validate/request_config.go | 14 +++++++++---- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/httpclient/resty.go b/httpclient/resty.go index c5f7a15..faaf57c 100644 --- a/httpclient/resty.go +++ b/httpclient/resty.go @@ -12,6 +12,7 @@ import ( "git.zhangdeman.cn/zhangdeman/consts" "git.zhangdeman.cn/zhangdeman/network/httpclient/define" "git.zhangdeman.cn/zhangdeman/serialize" + "git.zhangdeman.cn/zhangdeman/wrapper" "github.com/go-resty/resty/v2" "github.com/tidwall/gjson" "net/http" @@ -37,9 +38,23 @@ func NewRestyClient(reqConfig *define.Request) (*resty.Client, *resty.Request) { client.SetJSONUnmarshaler(serialize.JSON.UnmarshalWithNumber) // 反序列化方法 request.SetPathParams(reqConfig.PathParam) // 设置path中的参数 - request.SetQueryParams(reqConfig.Query) // 设置query参数 - request.SetHeaders(reqConfig.Header) // 设置header - request.URL = reqConfig.FullUrl // 请求接口 + query := map[string]string{} + for queryName, queryValue := range reqConfig.Query { + if nil == queryValue { + continue + } + query[queryName] = wrapper.AnyDataType(queryValue).ToString().Value() + } + request.SetQueryParams(query) // 设置query参数 + header := map[string]string{} + for headerName, headerValue := range reqConfig.Header { + if nil == headerValue { + continue + } + header[headerName] = wrapper.AnyDataType(headerValue).ToString().Value() + } + request.SetHeaders(header) // 设置header + request.URL = reqConfig.FullUrl // 请求接口 for pathParamName, pathParamValue := range reqConfig.PathParam { if len(pathParamValue) == 0 { continue @@ -49,9 +64,12 @@ func NewRestyClient(reqConfig *define.Request) (*resty.Client, *resty.Request) { request.Method = reqConfig.Method // 请求方法 cookieList := make([]*http.Cookie, 0) for cookieName, cookieValue := range reqConfig.Cookie { + if nil == cookieValue { + continue + } cookieList = append(cookieList, &http.Cookie{ Name: cookieName, - Value: cookieValue, + Value: wrapper.AnyDataType(cookieValue).ToString().Value(), }) } request.SetCookies(cookieList) // 设置cookie @@ -94,8 +112,9 @@ func formatHeader(requestConfig *define.Request) { if nil == requestConfig { return } - formatHeaderData := make(map[string]string) + formatHeaderData := make(map[string]any) for headerName, headerVal := range requestConfig.Header { + // 规范化处理 header 名称 formatHeaderData[textproto.CanonicalMIMEHeaderKey(headerName)] = headerVal } requestConfig.Header = formatHeaderData diff --git a/httpclient/validate/request_config.go b/httpclient/validate/request_config.go index df06cc6..31c242a 100644 --- a/httpclient/validate/request_config.go +++ b/httpclient/validate/request_config.go @@ -8,8 +8,9 @@ package validate import ( - "git.zhangdeman.cn/zhangdeman/network/httpclient/define" + "fmt" "git.zhangdeman.cn/zhangdeman/consts" + "git.zhangdeman.cn/zhangdeman/network/httpclient/define" "net/http" "net/url" "strings" @@ -49,18 +50,23 @@ func (rc *requestConfig) initDefaultConfig(reqConfig *define.Request) { } } if nil == reqConfig.Header { - reqConfig.Header = map[string]string{} + reqConfig.Header = map[string]any{} } if len(reqConfig.ContentType) > 0 { reqConfig.Header[consts.HeaderKeyContentType.String()] = reqConfig.ContentType } else { - if len(reqConfig.Header[consts.HeaderKeyContentType.String()]) == 0 { + if val, exist := reqConfig.Header[consts.HeaderKeyContentType.String()]; exist { + if val == nil || fmt.Sprintf("%v", val) == "" { + // 没配置Content-Type, 默认JSON + reqConfig.Header[consts.HeaderKeyContentType.String()] = consts.MimeTypeJson + } + } else { // 没配置Content-Type, 默认JSON reqConfig.Header[consts.HeaderKeyContentType.String()] = consts.MimeTypeJson } } if nil == reqConfig.Cookie { - reqConfig.Cookie = map[string]string{} + reqConfig.Cookie = map[string]any{} } if reqConfig.ConnectTimeout <= 0 { reqConfig.ConnectTimeout = define.DefaultConnectTimeout