diff --git a/workflow.go b/workflow.go index 74ac2e4..d11c47a 100644 --- a/workflow.go +++ b/workflow.go @@ -110,6 +110,7 @@ func (wf *Workflow) SetURLQuery(query url.Values) *Workflow { if query == nil { return wf } + query = (url.Values)(mergeMapList(wf.session.Query, query)) wf.ParsedURL.RawQuery = query.Encode() return wf } @@ -153,44 +154,46 @@ func (wf *Workflow) SetURLRawPath(path string) *Workflow { return wf } -// SetBodyParams 参数设晚上 +// SetBodyParams 参数设置 func (wf *Workflow) SetBodyParams(params ...interface{}) *Workflow { - if params == nil { - return wf - } + if params != nil { - plen := len(params) - defaultContentType := TypeURLENCODED + plen := len(params) + defaultContentType := TypeURLENCODED - if plen >= 2 { - t := params[plen-1] - defaultContentType = t.(string) - wf.Body.ContentType = defaultContentType - } else { - wf.Body.ContentType = defaultContentType - } + if plen >= 2 { + t := params[plen-1] + defaultContentType = t.(string) + wf.Body.ContentType = defaultContentType + } else { + wf.Body.ContentType = defaultContentType + } - if defaultContentType == TypeFormData { - // TODO: form-data - createMultipart(wf.Body, params) - } else { - var values url.Values - switch param := params[0].(type) { - case map[string]string: - values := make(url.Values) - for k, v := range param { - values.Set(k, v) + if defaultContentType == TypeFormData { + // TODO: form-data + createMultipart(wf.Body, params) + } else { + + var values url.Values + switch param := params[0].(type) { + case map[string]string: + values := make(url.Values) + 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 } @@ -226,7 +229,7 @@ func mergeMapList(header1, header2 map[string][]string) map[string][]string { if mergeValue, ok := merged[key]; ok { merged[key] = append(mergeValue, v) } 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的头 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