| 
									
										
										
										
											2018-10-17 14:25:17 +08:00
										 |  |  | package requests | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-17 18:38:04 +08:00
										 |  |  | import ( | 
					
						
							| 
									
										
										
										
											2018-10-19 19:16:34 +08:00
										 |  |  | 	"net/http" | 
					
						
							| 
									
										
										
										
											2018-10-17 18:38:04 +08:00
										 |  |  | 	"net/url" | 
					
						
							|  |  |  | 	"regexp" | 
					
						
							| 
									
										
										
										
											2018-10-26 11:40:04 +08:00
										 |  |  | 	"strings" | 
					
						
							| 
									
										
										
										
											2018-10-17 18:38:04 +08:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2018-10-17 14:25:17 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Workflow 工作流 | 
					
						
							|  |  |  | type Workflow struct { | 
					
						
							| 
									
										
										
										
											2018-10-17 18:38:04 +08:00
										 |  |  | 	session   *Session | 
					
						
							|  |  |  | 	ParsedURL *url.URL | 
					
						
							|  |  |  | 	Method    string | 
					
						
							| 
									
										
										
										
											2018-11-19 18:07:37 +08:00
										 |  |  | 	Body      IBody | 
					
						
							| 
									
										
										
										
											2018-10-23 17:08:50 +08:00
										 |  |  | 	Header    http.Header | 
					
						
							|  |  |  | 	Cookies   map[string]*http.Cookie | 
					
						
							| 
									
										
										
										
											2018-10-17 14:25:17 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // NewWorkflow new and init workflow | 
					
						
							| 
									
										
										
										
											2018-10-26 11:40:04 +08:00
										 |  |  | func NewWorkflow(ses *Session, u string) *Workflow { | 
					
						
							| 
									
										
										
										
											2018-10-17 14:25:17 +08:00
										 |  |  | 	wf := &Workflow{} | 
					
						
							|  |  |  | 	wf.SwitchSession(ses) | 
					
						
							| 
									
										
										
										
											2018-10-23 17:08:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-21 15:21:01 +08:00
										 |  |  | 	wf.SetRawURL(u) | 
					
						
							| 
									
										
										
										
											2018-10-26 11:40:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-19 18:07:37 +08:00
										 |  |  | 	wf.Body = NewBody() | 
					
						
							| 
									
										
										
										
											2018-10-23 17:08:50 +08:00
										 |  |  | 	wf.Header = make(http.Header) | 
					
						
							|  |  |  | 	wf.Cookies = make(map[string]*http.Cookie) | 
					
						
							| 
									
										
										
										
											2018-10-17 14:25:17 +08:00
										 |  |  | 	return wf | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // SwitchSession 替换Session | 
					
						
							|  |  |  | func (wf *Workflow) SwitchSession(ses *Session) { | 
					
						
							|  |  |  | 	wf.session = ses | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-23 17:08:50 +08:00
										 |  |  | // AddHeader 添加头信息  Get方法从Header参数上获取 | 
					
						
							|  |  |  | func (wf *Workflow) AddHeader(key, value string) *Workflow { | 
					
						
							|  |  |  | 	wf.Header.Add(key, value) | 
					
						
							|  |  |  | 	return wf | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-21 17:43:22 +08:00
										 |  |  | // SetHeader 设置完全替换原有Header | 
					
						
							|  |  |  | func (wf *Workflow) SetHeader(header http.Header) *Workflow { | 
					
						
							|  |  |  | 	wf.Header = make(http.Header) | 
					
						
							|  |  |  | 	for k, HValues := range header { | 
					
						
							|  |  |  | 		var newHValues []string | 
					
						
							|  |  |  | 		for _, value := range HValues { | 
					
						
							|  |  |  | 			newHValues = append(newHValues, value) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		wf.Header[k] = newHValues | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-10-23 17:08:50 +08:00
										 |  |  | 	return wf | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-26 11:40:04 +08:00
										 |  |  | // 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) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-23 17:08:50 +08:00
										 |  |  | // DelHeader 添加头信息 Get方法从Header参数上获取 | 
					
						
							|  |  |  | func (wf *Workflow) DelHeader(key string) *Workflow { | 
					
						
							|  |  |  | 	wf.Header.Del(key) | 
					
						
							|  |  |  | 	return wf | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-19 19:16:34 +08:00
										 |  |  | // AddCookie 添加Cookie | 
					
						
							| 
									
										
										
										
											2018-10-23 17:08:50 +08:00
										 |  |  | func (wf *Workflow) AddCookie(c *http.Cookie) *Workflow { | 
					
						
							|  |  |  | 	wf.Cookies[c.Name] = c | 
					
						
							|  |  |  | 	return wf | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-21 17:43:22 +08:00
										 |  |  | // AddCookies 添加[]*http.Cookie | 
					
						
							|  |  |  | func (wf *Workflow) AddCookies(cookies []*http.Cookie) *Workflow { | 
					
						
							|  |  |  | 	for _, c := range cookies { | 
					
						
							|  |  |  | 		wf.AddCookie(c) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return wf | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-23 17:08:50 +08:00
										 |  |  | // AddKVCookie 添加 以 key value 的 Cookie | 
					
						
							|  |  |  | func (wf *Workflow) AddKVCookie(name, value string) *Workflow { | 
					
						
							|  |  |  | 	wf.Cookies[name] = &http.Cookie{Name: name, Value: value} | 
					
						
							|  |  |  | 	return wf | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-10-19 19:16:34 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-23 17:08:50 +08:00
										 |  |  | // DelCookie 删除Cookie | 
					
						
							|  |  |  | func (wf *Workflow) DelCookie(name interface{}) *Workflow { | 
					
						
							|  |  |  | 	switch n := name.(type) { | 
					
						
							|  |  |  | 	case string: | 
					
						
							|  |  |  | 		if _, ok := wf.Cookies[n]; ok { | 
					
						
							|  |  |  | 			delete(wf.Cookies, n) | 
					
						
							|  |  |  | 			return wf | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	case *http.Cookie: | 
					
						
							|  |  |  | 		if _, ok := wf.Cookies[n.Name]; ok { | 
					
						
							|  |  |  | 			delete(wf.Cookies, n.Name) | 
					
						
							|  |  |  | 			return wf | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("name type is not support") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2018-10-19 19:16:34 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-21 15:21:01 +08:00
										 |  |  | // GetParsedURL 获取url的string形式 | 
					
						
							|  |  |  | func (wf *Workflow) GetParsedURL() *url.URL { | 
					
						
							|  |  |  | 	return wf.ParsedURL | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // SetParsedURL 获取url的string形式 | 
					
						
							|  |  |  | func (wf *Workflow) SetParsedURL(u *url.URL) *Workflow { | 
					
						
							|  |  |  | 	wf.ParsedURL = u | 
					
						
							|  |  |  | 	return wf | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // GetRawURL 获取url的string形式 | 
					
						
							|  |  |  | func (wf *Workflow) GetRawURL() string { | 
					
						
							| 
									
										
										
										
											2018-10-26 11:40:04 +08:00
										 |  |  | 	u := strings.Split(wf.ParsedURL.String(), "?")[0] + "?" + wf.GetCombineQuery().Encode() | 
					
						
							|  |  |  | 	return u | 
					
						
							| 
									
										
										
										
											2018-10-17 18:38:04 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-21 15:21:01 +08:00
										 |  |  | // SetRawURL 设置 url | 
					
						
							|  |  |  | func (wf *Workflow) SetRawURL(srcURL string) *Workflow { | 
					
						
							| 
									
										
										
										
											2018-10-17 18:38:04 +08:00
										 |  |  | 	purl, err := url.ParseRequestURI(srcURL) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		panic(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	wf.ParsedURL = purl | 
					
						
							|  |  |  | 	return wf | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-26 11:40:04 +08:00
										 |  |  | // GetQuery 获取Query参数 | 
					
						
							|  |  |  | func (wf *Workflow) GetQuery() url.Values { | 
					
						
							|  |  |  | 	return wf.ParsedURL.Query() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // GetCombineQuery 获取Query参数 | 
					
						
							|  |  |  | func (wf *Workflow) GetCombineQuery() url.Values { | 
					
						
							| 
									
										
										
										
											2018-10-17 18:38:04 +08:00
										 |  |  | 	if wf.ParsedURL != nil { | 
					
						
							| 
									
										
										
										
											2018-10-24 16:59:17 +08:00
										 |  |  | 		vs := wf.ParsedURL.Query() | 
					
						
							| 
									
										
										
										
											2018-10-26 11:40:04 +08:00
										 |  |  | 		return mergeMapList(wf.session.GetQuery(), vs) | 
					
						
							| 
									
										
										
										
											2018-10-17 18:38:04 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-26 11:40:04 +08:00
										 |  |  | // SetQuery 设置Query参数 | 
					
						
							|  |  |  | func (wf *Workflow) SetQuery(query url.Values) *Workflow { | 
					
						
							| 
									
										
										
										
											2018-10-17 18:38:04 +08:00
										 |  |  | 	if query == nil { | 
					
						
							|  |  |  | 		return wf | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-10-24 18:19:05 +08:00
										 |  |  | 	query = (url.Values)(mergeMapList(wf.session.Query, query)) | 
					
						
							| 
									
										
										
										
											2018-10-17 18:38:04 +08:00
										 |  |  | 	wf.ParsedURL.RawQuery = query.Encode() | 
					
						
							|  |  |  | 	return wf | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var regexGetPath = regexp.MustCompile("/[^/]*") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // GetURLPath 获取Path参数 | 
					
						
							|  |  |  | func (wf *Workflow) GetURLPath() []string { | 
					
						
							|  |  |  | 	return regexGetPath.FindAllString(wf.ParsedURL.Path, -1) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // GetURLRawPath 获取未分解Path参数 | 
					
						
							|  |  |  | func (wf *Workflow) GetURLRawPath() string { | 
					
						
							|  |  |  | 	return wf.ParsedURL.Path | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // encodePath path格式每个item都必须以/开头 | 
					
						
							|  |  |  | func encodePath(path []string) string { | 
					
						
							|  |  |  | 	rawpath := "" | 
					
						
							|  |  |  | 	for _, p := range path { | 
					
						
							|  |  |  | 		if p[0] != '/' { | 
					
						
							|  |  |  | 			p = "/" + p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		rawpath += p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return rawpath | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // SetURLPath 设置Path参数 | 
					
						
							|  |  |  | func (wf *Workflow) SetURLPath(path []string) *Workflow { | 
					
						
							|  |  |  | 	if path == nil { | 
					
						
							|  |  |  | 		return wf | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	wf.ParsedURL.Path = encodePath(path) | 
					
						
							|  |  |  | 	return wf | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-23 17:35:40 +08:00
										 |  |  | // SetURLRawPath 设置Pa晚上参数 | 
					
						
							| 
									
										
										
										
											2018-10-23 17:39:11 +08:00
										 |  |  | func (wf *Workflow) SetURLRawPath(path string) *Workflow { | 
					
						
							|  |  |  | 	wf.ParsedURL.Path = path | 
					
						
							| 
									
										
										
										
											2018-10-17 18:38:04 +08:00
										 |  |  | 	return wf | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-08 14:30:50 +08:00
										 |  |  | // SetBody 参数设置 | 
					
						
							| 
									
										
										
										
											2018-11-21 15:54:06 +08:00
										 |  |  | func (wf *Workflow) SetBody(body IBody) *Workflow { | 
					
						
							|  |  |  | 	wf.Body = body | 
					
						
							|  |  |  | 	return wf | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // GetBody 参数设置 | 
					
						
							|  |  |  | func (wf *Workflow) GetBody(body IBody) IBody { | 
					
						
							|  |  |  | 	return wf.Body | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AutoSetBody 参数设置 | 
					
						
							|  |  |  | func (wf *Workflow) AutoSetBody(params ...interface{}) *Workflow { | 
					
						
							| 
									
										
										
										
											2018-10-17 18:38:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-19 18:42:31 +08:00
										 |  |  | 	if params != nil { | 
					
						
							| 
									
										
										
										
											2018-10-24 18:19:05 +08:00
										 |  |  | 		plen := len(params) | 
					
						
							|  |  |  | 		defaultContentType := TypeURLENCODED | 
					
						
							| 
									
										
										
										
											2018-10-17 14:25:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-24 18:19:05 +08:00
										 |  |  | 		if plen >= 2 { | 
					
						
							|  |  |  | 			t := params[plen-1] | 
					
						
							|  |  |  | 			defaultContentType = t.(string) | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-10-17 14:25:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-21 15:43:52 +08:00
										 |  |  | 		wf.Body.SetPrefix(defaultContentType) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-24 18:19:05 +08:00
										 |  |  | 		if defaultContentType == TypeFormData { | 
					
						
							|  |  |  | 			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) | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2018-11-19 18:07:37 +08:00
										 |  |  | 				wf.Body.SetIOBody([]byte(values.Encode())) | 
					
						
							| 
									
										
										
										
											2018-10-24 18:19:05 +08:00
										 |  |  | 			case map[string][]string: | 
					
						
							|  |  |  | 				values = param | 
					
						
							| 
									
										
										
										
											2018-11-19 18:07:37 +08:00
										 |  |  | 				wf.Body.SetIOBody([]byte(values.Encode())) | 
					
						
							| 
									
										
										
										
											2018-10-24 18:19:05 +08:00
										 |  |  | 			case string: | 
					
						
							| 
									
										
										
										
											2018-11-19 18:07:37 +08:00
										 |  |  | 				wf.Body.SetIOBody([]byte(param)) | 
					
						
							| 
									
										
										
										
											2018-10-24 18:19:05 +08:00
										 |  |  | 			case []byte: | 
					
						
							| 
									
										
										
										
											2018-11-19 18:07:37 +08:00
										 |  |  | 				wf.Body.SetIOBody(param) | 
					
						
							| 
									
										
										
										
											2018-10-17 14:25:17 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-10-24 18:19:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-17 14:25:17 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return wf | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-24 18:23:04 +08:00
										 |  |  | func mergeMapList(headers ...map[string][]string) map[string][]string { | 
					
						
							| 
									
										
										
										
											2018-10-24 16:59:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-23 17:08:50 +08:00
										 |  |  | 	set := make(map[string]map[string]int) | 
					
						
							| 
									
										
										
										
											2018-10-24 16:59:17 +08:00
										 |  |  | 	merged := make(map[string][]string) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-24 18:23:04 +08:00
										 |  |  | 	for _, header := range headers { | 
					
						
							|  |  |  | 		for key, values := range header { | 
					
						
							|  |  |  | 			for _, v := range values { | 
					
						
							|  |  |  | 				if vs, ok := set[key]; ok { | 
					
						
							|  |  |  | 					vs[v] = 1 | 
					
						
							|  |  |  | 				} else { | 
					
						
							|  |  |  | 					set[key] = make(map[string]int) | 
					
						
							|  |  |  | 					set[key][v] = 1 | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2018-10-23 17:08:50 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for key, mvalue := range set { | 
					
						
							|  |  |  | 		for v := range mvalue { | 
					
						
							| 
									
										
										
										
											2018-10-24 16:59:17 +08:00
										 |  |  | 			// merged.Add(key, v) | 
					
						
							|  |  |  | 			if mergeValue, ok := merged[key]; ok { | 
					
						
							|  |  |  | 				merged[key] = append(mergeValue, v) | 
					
						
							|  |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2018-10-24 18:19:05 +08:00
										 |  |  | 				merged[key] = []string{v} | 
					
						
							| 
									
										
										
										
											2018-10-24 16:59:17 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-10-23 17:08:50 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-24 16:59:17 +08:00
										 |  |  | 	return merged | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // setHeaderRequest 设置request的头 | 
					
						
							|  |  |  | func setHeaderRequest(req *http.Request, wf *Workflow) { | 
					
						
							| 
									
										
										
										
											2018-10-24 18:23:04 +08:00
										 |  |  | 	req.Header = mergeMapList(req.Header, wf.session.Header, wf.Header) | 
					
						
							| 
									
										
										
										
											2018-10-23 17:20:17 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // setHeaderRequest 设置request的临时Cookie, 永久需要在session上设置cookie | 
					
						
							|  |  |  | func setTempCookieRequest(req *http.Request, wf *Workflow) { | 
					
						
							|  |  |  | 	if wf.Cookies != nil { | 
					
						
							|  |  |  | 		for _, c := range wf.Cookies { | 
					
						
							|  |  |  | 			req.AddCookie(c) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Execute 执行 | 
					
						
							|  |  |  | func (wf *Workflow) Execute() (*Response, error) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-26 11:40:04 +08:00
										 |  |  | 	req := buildBodyRequest(wf) | 
					
						
							| 
									
										
										
										
											2018-10-23 17:20:17 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	setHeaderRequest(req, wf) | 
					
						
							|  |  |  | 	setTempCookieRequest(req, wf) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-23 17:35:40 +08:00
										 |  |  | 	if wf.session.auth != nil { | 
					
						
							|  |  |  | 		req.SetBasicAuth(wf.session.auth.User, wf.session.auth.Password) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-17 14:25:17 +08:00
										 |  |  | 	resp, err := wf.session.client.Do(req) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return nil, err | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-12-18 01:04:32 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-17 14:25:17 +08:00
										 |  |  | 	return FromHTTPResponse(resp) | 
					
						
							|  |  |  | } |