diff options
Diffstat (limited to 'vendor/github.com/monaco-io/request/request.go')
-rw-r--r-- | vendor/github.com/monaco-io/request/request.go | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/vendor/github.com/monaco-io/request/request.go b/vendor/github.com/monaco-io/request/request.go new file mode 100644 index 00000000..0a4e7df4 --- /dev/null +++ b/vendor/github.com/monaco-io/request/request.go @@ -0,0 +1,98 @@ +package request + +import ( + "bytes" + "crypto/tls" + "io/ioutil" + "net/http" + "net/http/cookiejar" + "net/url" + "time" +) + +// Do send http request +func (c *Client) Do() (resp SugaredResp, err error) { + defer resp.Close() + + if err := c.buildRequest(); err != nil { + return resp, err + } + + // send request and close on func call end + if resp.resp, err = c.client.Do(c.req); err != nil { + return resp, err + } + + // read response data form resp + resp.Data, err = ioutil.ReadAll(resp.resp.Body) + resp.Code = resp.resp.StatusCode + return resp, err +} + +func (c *Client) buildRequest() (err error) { + + // encode requestURL.httpURL like https://google.com?hello=world&package=request + ru := requestURL{ + urlString: c.URL, + parameters: c.Params, + } + if err := ru.EncodeURL(); err != nil { + return err + } + + // build request + c.req, err = http.NewRequest(c.Method, ru.string(), bytes.NewReader(c.Body)) + if err != nil { + return err + } + + // apply Header to request + if c.Method == "POST" { + if c.ContentType == "" { + c.ContentType = ApplicationJSON + } + c.req.Header.Set("Content-Type", string(c.ContentType)) + } + for k, v := range c.Header { + c.req.Header.Add(k, v) + } + + // apply basic Auth of request header + if c.BasicAuth.Username != "" && c.BasicAuth.Password != "" { + c.req.SetBasicAuth(c.BasicAuth.Username, c.BasicAuth.Password) + } + + c.client = &http.Client{} + + // apply timeout + if c.Timeout > 0 { + c.client.Timeout = c.Timeout * time.Second + } + + // apply cookies + if c.Cookies != nil { + jar, _ := cookiejar.New(nil) + jar.SetCookies(&url.URL{Scheme: ru.scheme(), Host: ru.host()}, c.Cookies) + c.client.Jar = jar + } + + // apply proxy + if c.ProxyURL != "" { + if proxy, err := url.Parse(c.ProxyURL); err == nil && proxy != nil { + c.client.Transport = &http.Transport{ + Proxy: http.ProxyURL(proxy), + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + } + } + } + + return err +} + +// Resp do request and get original http response struct +func (c *Client) Resp() (resp *http.Response, err error) { + if err = c.buildRequest(); err != nil { + return resp, err + } + return c.client.Do(c.req) +} |