From 64d8c9d5d04960642e9bdf4726380ce22da0248e Mon Sep 17 00:00:00 2001 From: jjxu <428192774@qq.com> Date: Sun, 29 Oct 2023 09:52:45 +0800 Subject: [PATCH] Optimize data processing for the multipart type --- headers.go | 13 ++++++------- parser.go | 22 ++++------------------ simpleRequest.go | 23 ++++++++++++++--------- utils.go | 9 +++++++++ 4 files changed, 33 insertions(+), 34 deletions(-) diff --git a/headers.go b/headers.go index 3adeaf0..d248b5c 100644 --- a/headers.go +++ b/headers.go @@ -1,10 +1,3 @@ -/* - *FileName: header.go - *Author: JJXu - *CreateTime: 2022/3/1 下午9:44 - *Description: - */ - package simpleRequest import ( @@ -70,6 +63,12 @@ func (s *HeadersConf) Add(header, value string) *HeadersConf { return s } +// Omit Use to disable automatically generated request headers ,some like Content_Type. +func (s *HeadersConf) Omit(keys ...string) *HeadersConf { + s.simpleReq.omitHeaderKeys = append(s.simpleReq.omitHeaderKeys, keys...) + return s +} + //一般用不到 //func (s *HeadersConf) Values(keys string) *HeadersConf { // s.simpleReq.headers.Values(keys) diff --git a/parser.go b/parser.go index 29feccc..cc0a54e 100644 --- a/parser.go +++ b/parser.go @@ -92,30 +92,16 @@ func multipartCommonParse(BodyEntry map[string]any) (reader io.Reader, contentTy formWriter := multipart.NewWriter(body) for k, sv := range BodyEntry { if strings.Contains(k, FormFilePathKey.string()) { - key := k[len(FormFilePathKey):] + fieldName := k[len(FormFilePathKey):] fp := sv.(string) filename := filepath.Base(fp) - filePart, _ := formWriter.CreateFormFile(key, filename) + //way1 + filePart, _ := formWriter.CreateFormFile(fieldName, filename) content, err := os.ReadFile(fp) if err != nil { panic(err) } _, _ = filePart.Write(content) - - // way 2 - file, err := os.Open(fp) - if err != nil { - panic(err) - } - defer file.Close() - fieldName := k[len(FormFilePathKey.string()):] - formPart, err := formWriter.CreateFormFile(fieldName, filepath.Base(fp)) - if err != nil { - panic(err) - } - if _, err = io.Copy(formPart, file); err != nil { - return - } } else { switch multValue := sv.(type) { case string: @@ -151,4 +137,4 @@ func multipartCommonParse(BodyEntry map[string]any) (reader io.Reader, contentTy panic(err) } return body, formWriter.FormDataContentType() -} \ No newline at end of file +} diff --git a/simpleRequest.go b/simpleRequest.go index 17dcec3..4c693e0 100644 --- a/simpleRequest.go +++ b/simpleRequest.go @@ -42,11 +42,12 @@ func NewRequest(opts ...OPTION) *SimpleRequest { } type SimpleRequest struct { - url string - queryParams url.Values - body io.Reader - headers http.Header - transport *http.Transport + url string + queryParams url.Values + body io.Reader + headers http.Header + omitHeaderKeys []string + transport *http.Transport BodyEntryMark EntryMark BodyEntries map[string]any @@ -182,9 +183,13 @@ func (s *SimpleRequest) LaunchTo(urls, method string) (body []byte, err error) { return nil, err } //headers - for k := range s.headers { - r.Header[k] = append(r.Header[k], s.headers[k]...) - s.headers.Del(k) + //for k := range s.headers { + // r.Header[k] = append(r.Header[k], s.headers[k]...) + // s.headers.Del(k) + //} + r.Header = s.headers + for _, k := range s.omitHeaderKeys { + r.Header.Del(k) } //queryParams if r.URL.RawQuery != "" { @@ -262,7 +267,7 @@ func (s *SimpleRequest) initBody() { s.body = parser.Unmarshal(s.BodyEntryMark, s.BodyEntries) fdParser := parser.(*FormDataParser) s.headers.Set("Content-Type", fdParser.ContentType) - + case IsXMLType(contentTypeData): //application/soap+xml ,application/xml var parser, ok = s.bodyEntryParsers[xmlDataType] diff --git a/utils.go b/utils.go index 52c7fb1..e8729d0 100644 --- a/utils.go +++ b/utils.go @@ -15,3 +15,12 @@ func IsJSONType(ct string) bool { func IsXMLType(ct string) bool { return xmlCheck.MatchString(ct) } + +func IsInArray(arr []string, str string) bool { + for _, v := range arr { + if v == str { + return true + } + } + return false +}