Optimize data processing for the multipart type

master
徐俊杰 11 months ago
parent 3795aecb68
commit 64d8c9d5d0

@ -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)

@ -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()
}
}

@ -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]

@ -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
}

Loading…
Cancel
Save