fix req.Header must merge other Header

This commit is contained in:
huangsimin 2018-10-24 18:19:05 +08:00
parent 13dfdee51c
commit 4b77382218

View File

@ -110,6 +110,7 @@ func (wf *Workflow) SetURLQuery(query url.Values) *Workflow {
if query == nil { if query == nil {
return wf return wf
} }
query = (url.Values)(mergeMapList(wf.session.Query, query))
wf.ParsedURL.RawQuery = query.Encode() wf.ParsedURL.RawQuery = query.Encode()
return wf return wf
} }
@ -153,44 +154,46 @@ func (wf *Workflow) SetURLRawPath(path string) *Workflow {
return wf return wf
} }
// SetBodyParams 参数设晚上 // SetBodyParams 参数设
func (wf *Workflow) SetBodyParams(params ...interface{}) *Workflow { func (wf *Workflow) SetBodyParams(params ...interface{}) *Workflow {
if params == nil { if params != nil {
return wf
}
plen := len(params) plen := len(params)
defaultContentType := TypeURLENCODED defaultContentType := TypeURLENCODED
if plen >= 2 { if plen >= 2 {
t := params[plen-1] t := params[plen-1]
defaultContentType = t.(string) defaultContentType = t.(string)
wf.Body.ContentType = defaultContentType wf.Body.ContentType = defaultContentType
} else { } else {
wf.Body.ContentType = defaultContentType wf.Body.ContentType = defaultContentType
} }
if defaultContentType == TypeFormData { if defaultContentType == TypeFormData {
// TODO: form-data // TODO: form-data
createMultipart(wf.Body, params) createMultipart(wf.Body, params)
} else { } else {
var values url.Values
switch param := params[0].(type) { var values url.Values
case map[string]string: switch param := params[0].(type) {
values := make(url.Values) case map[string]string:
for k, v := range param { values := make(url.Values)
values.Set(k, v) for k, v := range param {
values.Set(k, v)
}
wf.Body.IOBody = []byte(values.Encode())
case map[string][]string:
values = param
wf.Body.IOBody = []byte(values.Encode())
case string:
wf.Body.IOBody = []byte(param)
case []byte:
wf.Body.IOBody = param
} }
wf.Body.IOBody = []byte(values.Encode())
case map[string][]string:
values = param
wf.Body.IOBody = []byte(values.Encode())
case string:
wf.Body.IOBody = []byte(param)
case []byte:
wf.Body.IOBody = param
} }
} }
return wf return wf
} }
@ -226,7 +229,7 @@ func mergeMapList(header1, header2 map[string][]string) map[string][]string {
if mergeValue, ok := merged[key]; ok { if mergeValue, ok := merged[key]; ok {
merged[key] = append(mergeValue, v) merged[key] = append(mergeValue, v)
} else { } else {
merged[key] = append(mergeValue, v) merged[key] = []string{v}
} }
} }
} }
@ -236,7 +239,7 @@ func mergeMapList(header1, header2 map[string][]string) map[string][]string {
// setHeaderRequest 设置request的头 // setHeaderRequest 设置request的头
func setHeaderRequest(req *http.Request, wf *Workflow) { func setHeaderRequest(req *http.Request, wf *Workflow) {
req.Header = mergeMapList(wf.session.Header, wf.Header) req.Header = mergeMapList(req.Header, mergeMapList(wf.session.Header, wf.Header))
} }
// setHeaderRequest 设置request的临时Cookie, 永久需要在session上设置cookie // setHeaderRequest 设置request的临时Cookie, 永久需要在session上设置cookie