请求正常, 参数拼接正常的版本

v0.0.9
This commit is contained in:
huangsimin 2018-10-26 11:40:04 +08:00
parent ae3982faaa
commit 730e3462f6
3 changed files with 58 additions and 36 deletions

24
base.go
View File

@ -7,39 +7,39 @@ import (
"reflect" "reflect"
) )
func buildBodyRequest(ver, rawurl string, body *Body) *http.Request { func buildBodyRequest(wf *Workflow) *http.Request {
var req *http.Request var req *http.Request
var err error var err error
contentType := "" contentType := ""
if body.IOBody == nil { if wf.Body.IOBody == nil {
req, err = http.NewRequest(ver, rawurl, nil) req, err = http.NewRequest(wf.Method, wf.GetStringURL(), nil)
} else { } else {
var bodybuf *bytes.Buffer var bodybuf *bytes.Buffer
switch body.IOBody.(type) { switch wf.Body.IOBody.(type) {
case []byte: case []byte:
bodybuf = bytes.NewBuffer(body.IOBody.([]byte)) bodybuf = bytes.NewBuffer(wf.Body.IOBody.([]byte))
case *bytes.Buffer: case *bytes.Buffer:
bodybuf = bytes.NewBuffer(body.IOBody.(*bytes.Buffer).Bytes()) bodybuf = bytes.NewBuffer(wf.Body.IOBody.(*bytes.Buffer).Bytes())
default: default:
panic(errors.New("the type is not exist, type is" + reflect.TypeOf(body.IOBody).String())) panic(errors.New("the type is not exist, type is" + reflect.TypeOf(wf.Body.IOBody).String()))
} }
req, err = http.NewRequest(ver, rawurl, bodybuf) req, err = http.NewRequest(wf.Method, wf.GetStringURL(), bodybuf)
} }
if err != nil { if err != nil {
panic(err) panic(err)
} }
if body.ContentType != "" { if wf.Body.ContentType != "" {
if body.ContentType == TypeContentEmpty { if wf.Body.ContentType == TypeContentEmpty {
contentType = "" contentType = ""
} else { } else {
contentType = body.ContentType contentType = wf.Body.ContentType
} }
} else { } else {
if contentType == "" { if contentType == "" {
if ver == "POST" || ver == "PUT" || ver == "PATCH" { if wf.Method == "POST" || wf.Method == "PUT" || wf.Method == "PATCH" {
contentType = TypeURLENCODED contentType = TypeURLENCODED
} }
} }

View File

@ -179,10 +179,20 @@ func (ses *Session) SetQuery(values url.Values) {
} }
// GetQuery 获取get query的值 // GetQuery 获取get query的值
func (ses *Session) GetQuery(values url.Values) url.Values { func (ses *Session) GetQuery() url.Values {
return ses.Query return ses.Query
} }
// SetHeader 设置set Header的值
func (ses *Session) SetHeader(header http.Header) {
ses.Header = header
}
// GetHeader 获取get Header的值
func (ses *Session) GetHeader() http.Header {
return ses.Header
}
// SetCookies 设置Cookies 或者添加Cookies Del // SetCookies 设置Cookies 或者添加Cookies Del
func (ses *Session) SetCookies(u *url.URL, cookies []*http.Cookie) { func (ses *Session) SetCookies(u *url.URL, cookies []*http.Cookie) {
ses.cookiejar.SetCookies(u, cookies) ses.cookiejar.SetCookies(u, cookies)
@ -217,57 +227,50 @@ func (ses *Session) ClearCookies() {
// Get 请求 // Get 请求
func (ses *Session) Get(url string) *Workflow { func (ses *Session) Get(url string) *Workflow {
wf := NewWorkflow(ses) wf := NewWorkflow(ses, url)
wf.Method = "GET" wf.Method = "GET"
wf.SetURL(url)
return wf return wf
} }
// Post 请求 // Post 请求
func (ses *Session) Post(url string) *Workflow { func (ses *Session) Post(url string) *Workflow {
wf := NewWorkflow(ses) wf := NewWorkflow(ses, url)
wf.Method = "POST" wf.Method = "POST"
wf.SetURL(url)
return wf return wf
} }
// Put 请求 // Put 请求
func (ses *Session) Put(url string) *Workflow { func (ses *Session) Put(url string) *Workflow {
wf := NewWorkflow(ses) wf := NewWorkflow(ses, url)
wf.Method = "PUT" wf.Method = "PUT"
wf.SetURL(url)
return wf return wf
} }
// Patch 请求 // Patch 请求
func (ses *Session) Patch(url string) *Workflow { func (ses *Session) Patch(url string) *Workflow {
wf := NewWorkflow(ses) wf := NewWorkflow(ses, url)
wf.Method = "PATCH" wf.Method = "PATCH"
wf.SetURL(url)
return wf return wf
} }
// Delete 请求 // Delete 请求
func (ses *Session) Delete(url string) *Workflow { func (ses *Session) Delete(url string) *Workflow {
wf := NewWorkflow(ses) wf := NewWorkflow(ses, url)
wf.Method = "DELETE" wf.Method = "DELETE"
wf.SetURL(url)
return wf return wf
} }
// Head 请求 // Head 请求
func (ses *Session) Head(url string) *Workflow { func (ses *Session) Head(url string) *Workflow {
wf := NewWorkflow(ses) wf := NewWorkflow(ses, url)
wf.Method = "HEAD" wf.Method = "HEAD"
wf.SetURL(url)
return wf return wf
} }
// Options 请求 // Options 请求
func (ses *Session) Options(url string) *Workflow { func (ses *Session) Options(url string) *Workflow {
wf := NewWorkflow(ses) wf := NewWorkflow(ses, url)
wf.Method = "OPTIONS" wf.Method = "OPTIONS"
wf.SetURL(url)
return wf return wf
} }

View File

@ -5,6 +5,7 @@ import (
"net/http" "net/http"
"net/url" "net/url"
"regexp" "regexp"
"strings"
) )
// Workflow 工作流 // Workflow 工作流
@ -18,10 +19,12 @@ type Workflow struct {
} }
// NewWorkflow new and init workflow // NewWorkflow new and init workflow
func NewWorkflow(ses *Session) *Workflow { func NewWorkflow(ses *Session, u string) *Workflow {
wf := &Workflow{} wf := &Workflow{}
wf.SwitchSession(ses) wf.SwitchSession(ses)
wf.SetURL(u)
wf.Body = &Body{} wf.Body = &Body{}
wf.Header = make(http.Header) wf.Header = make(http.Header)
wf.Cookies = make(map[string]*http.Cookie) wf.Cookies = make(map[string]*http.Cookie)
@ -45,6 +48,16 @@ func (wf *Workflow) SetHeader(key, value string) *Workflow {
return wf return wf
} }
// GetHeader 获取Workflow Header
func (wf *Workflow) GetHeader() http.Header {
return wf.Header
}
// GetCombineHeader 获取后的Header信息
func (wf *Workflow) GetCombineHeader() http.Header {
return mergeMapList(wf.session.Header, wf.Header)
}
// DelHeader 添加头信息 Get方法从Header参数上获取 // DelHeader 添加头信息 Get方法从Header参数上获取
func (wf *Workflow) DelHeader(key string) *Workflow { func (wf *Workflow) DelHeader(key string) *Workflow {
wf.Header.Del(key) wf.Header.Del(key)
@ -84,7 +97,8 @@ func (wf *Workflow) DelCookie(name interface{}) *Workflow {
// GetStringURL 获取url的string形式 // GetStringURL 获取url的string形式
func (wf *Workflow) GetStringURL() string { func (wf *Workflow) GetStringURL() string {
return wf.ParsedURL.String() u := strings.Split(wf.ParsedURL.String(), "?")[0] + "?" + wf.GetCombineQuery().Encode()
return u
} }
// SetURL 设置 url // SetURL 设置 url
@ -97,17 +111,22 @@ func (wf *Workflow) SetURL(srcURL string) *Workflow {
return wf return wf
} }
// GetURLQuery 获取Query参数 // GetQuery 获取Query参数
func (wf *Workflow) GetURLQuery() url.Values { func (wf *Workflow) GetQuery() url.Values {
return wf.ParsedURL.Query()
}
// GetCombineQuery 获取Query参数
func (wf *Workflow) GetCombineQuery() url.Values {
if wf.ParsedURL != nil { if wf.ParsedURL != nil {
vs := wf.ParsedURL.Query() vs := wf.ParsedURL.Query()
return mergeMapList(wf.session.Query, vs) return mergeMapList(wf.session.GetQuery(), vs)
} }
return nil return nil
} }
// SetURLQuery 设置Query参数 // SetQuery 设置Query参数
func (wf *Workflow) SetURLQuery(query url.Values) *Workflow { func (wf *Workflow) SetQuery(query url.Values) *Workflow {
if query == nil { if query == nil {
return wf return wf
} }
@ -232,7 +251,6 @@ func mergeMapList(headers ...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(req.Header, wf.session.Header, wf.Header) req.Header = mergeMapList(req.Header, wf.session.Header, wf.Header)
log.Println(wf.Header, wf.session.Header)
} }
// setHeaderRequest 设置request的临时Cookie, 永久需要在session上设置cookie // setHeaderRequest 设置request的临时Cookie, 永久需要在session上设置cookie
@ -247,7 +265,7 @@ func setTempCookieRequest(req *http.Request, wf *Workflow) {
// Execute 执行 // Execute 执行
func (wf *Workflow) Execute() (*Response, error) { func (wf *Workflow) Execute() (*Response, error) {
req := buildBodyRequest(wf.Method, wf.GetStringURL(), wf.Body) req := buildBodyRequest(wf)
setHeaderRequest(req, wf) setHeaderRequest(req, wf)
setTempCookieRequest(req, wf) setTempCookieRequest(req, wf)
@ -255,6 +273,7 @@ func (wf *Workflow) Execute() (*Response, error) {
if wf.session.auth != nil { if wf.session.auth != nil {
req.SetBasicAuth(wf.session.auth.User, wf.session.auth.Password) req.SetBasicAuth(wf.session.auth.User, wf.session.auth.Password)
} }
log.Println(req.Header)
resp, err := wf.session.client.Do(req) resp, err := wf.session.client.Do(req)
if err != nil { if err != nil {