From 730e3462f689e4856b368f267a891a940327b2fc Mon Sep 17 00:00:00 2001 From: huangsimin Date: Fri, 26 Oct 2018 11:40:04 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=B7=E6=B1=82=E6=AD=A3=E5=B8=B8,=20?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E6=8B=BC=E6=8E=A5=E6=AD=A3=E5=B8=B8=E7=9A=84?= =?UTF-8?q?=E7=89=88=E6=9C=AC=20v0.0.9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base.go | 24 ++++++++++++------------ session.go | 33 ++++++++++++++++++--------------- workflow.go | 37 ++++++++++++++++++++++++++++--------- 3 files changed, 58 insertions(+), 36 deletions(-) diff --git a/base.go b/base.go index ce7bc02..74f8532 100644 --- a/base.go +++ b/base.go @@ -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 } } diff --git a/session.go b/session.go index b45dc04..4c39192 100644 --- a/session.go +++ b/session.go @@ -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 } diff --git a/workflow.go b/workflow.go index 202fa51..8ad39ed 100644 --- a/workflow.go +++ b/workflow.go @@ -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 {