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

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"
)
func buildBodyRequest(ver, rawurl string, body *Body) *http.Request {
func buildBodyRequest(wf *Workflow) *http.Request {
var req *http.Request
var err error
contentType := ""
if body.IOBody == nil {
req, err = http.NewRequest(ver, rawurl, nil)
if wf.Body.IOBody == nil {
req, err = http.NewRequest(wf.Method, wf.GetStringURL(), nil)
} else {
var bodybuf *bytes.Buffer
switch body.IOBody.(type) {
switch wf.Body.IOBody.(type) {
case []byte:
bodybuf = bytes.NewBuffer(body.IOBody.([]byte))
bodybuf = bytes.NewBuffer(wf.Body.IOBody.([]byte))
case *bytes.Buffer:
bodybuf = bytes.NewBuffer(body.IOBody.(*bytes.Buffer).Bytes())
bodybuf = bytes.NewBuffer(wf.Body.IOBody.(*bytes.Buffer).Bytes())
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 {
panic(err)
}
if body.ContentType != "" {
if body.ContentType == TypeContentEmpty {
if wf.Body.ContentType != "" {
if wf.Body.ContentType == TypeContentEmpty {
contentType = ""
} else {
contentType = body.ContentType
contentType = wf.Body.ContentType
}
} else {
if contentType == "" {
if ver == "POST" || ver == "PUT" || ver == "PATCH" {
if wf.Method == "POST" || wf.Method == "PUT" || wf.Method == "PATCH" {
contentType = TypeURLENCODED
}
}

View File

@ -179,10 +179,20 @@ func (ses *Session) SetQuery(values url.Values) {
}
// GetQuery 获取get query的值
func (ses *Session) GetQuery(values url.Values) url.Values {
func (ses *Session) GetQuery() url.Values {
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
func (ses *Session) SetCookies(u *url.URL, cookies []*http.Cookie) {
ses.cookiejar.SetCookies(u, cookies)
@ -217,57 +227,50 @@ func (ses *Session) ClearCookies() {
// Get 请求
func (ses *Session) Get(url string) *Workflow {
wf := NewWorkflow(ses)
wf := NewWorkflow(ses, url)
wf.Method = "GET"
wf.SetURL(url)
return wf
}
// Post 请求
func (ses *Session) Post(url string) *Workflow {
wf := NewWorkflow(ses)
wf := NewWorkflow(ses, url)
wf.Method = "POST"
wf.SetURL(url)
return wf
}
// Put 请求
func (ses *Session) Put(url string) *Workflow {
wf := NewWorkflow(ses)
wf := NewWorkflow(ses, url)
wf.Method = "PUT"
wf.SetURL(url)
return wf
}
// Patch 请求
func (ses *Session) Patch(url string) *Workflow {
wf := NewWorkflow(ses)
wf := NewWorkflow(ses, url)
wf.Method = "PATCH"
wf.SetURL(url)
return wf
}
// Delete 请求
func (ses *Session) Delete(url string) *Workflow {
wf := NewWorkflow(ses)
wf := NewWorkflow(ses, url)
wf.Method = "DELETE"
wf.SetURL(url)
return wf
}
// Head 请求
func (ses *Session) Head(url string) *Workflow {
wf := NewWorkflow(ses)
wf := NewWorkflow(ses, url)
wf.Method = "HEAD"
wf.SetURL(url)
return wf
}
// Options 请求
func (ses *Session) Options(url string) *Workflow {
wf := NewWorkflow(ses)
wf := NewWorkflow(ses, url)
wf.Method = "OPTIONS"
wf.SetURL(url)
return wf
}

View File

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