From 05d5b054166fb2639fbc65520defbb66f0b9d321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Martins?= Date: Wed, 29 Jun 2016 03:32:26 +0100 Subject: [PATCH] Add set scheme client option MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: André Martins --- client.go | 13 +++++++++++++ default.go | 6 ++++++ middleware.go | 5 +++++ resty_test.go | 11 +++++++++++ 4 files changed, 35 insertions(+) diff --git a/client.go b/client.go index 2b66e175..200addb1 100644 --- a/client.go +++ b/client.go @@ -88,6 +88,7 @@ type Client struct { setContentLength bool isHTTPMode bool outputDirectory string + scheme string proxyURL *url.URL beforeRequest []func(*Client, *Request) error afterResponse []func(*Client, *Response) error @@ -582,6 +583,17 @@ func (c *Client) SetTransport(transport *http.Transport) *Client { return c } +// SetScheme method sets custom scheme in the resty client. Its way to override default. +// resty.SetScheme("http") +// +func (c *Client) SetScheme(scheme string) *Client { + if c.scheme == "" { + c.scheme = scheme + } + + return c +} + // executes the given `Request` object and returns response func (c *Client) execute(req *Request) (*Response, error) { // Apply Request middleware @@ -603,6 +615,7 @@ func (c *Client) execute(req *Request) (*Response, error) { req.Time = time.Now() c.httpClient.Transport = c.transport + resp, err := c.httpClient.Do(req.RawRequest) response := &Response{ diff --git a/default.go b/default.go index 34e58415..85b7f92a 100644 --- a/default.go +++ b/default.go @@ -214,6 +214,12 @@ func SetTransport(transport *http.Transport) *Client { return DefaultClient.SetTransport(transport) } +// SetScheme method sets custom scheme in the resty client. +// See `Client.SetScheme` for more information. +func SetScheme(scheme string) *Client { + return DefaultClient.SetScheme(scheme) +} + func init() { DefaultClient = New() } diff --git a/middleware.go b/middleware.go index 4555f39e..7333481b 100644 --- a/middleware.go +++ b/middleware.go @@ -138,6 +138,11 @@ func createHTTPRequest(c *Client, r *Request) (err error) { r.RawRequest.AddCookie(cookie) } + if r.RawRequest.URL != nil && r.RawRequest.URL.Scheme == "" { + r.RawRequest.URL.Scheme = c.scheme + r.RawRequest.URL.Host = r.URL + } + return } diff --git a/resty_test.go b/resty_test.go index da53bdce..c6cabf97 100644 --- a/resty_test.go +++ b/resty_test.go @@ -1213,6 +1213,14 @@ func TestSetTransport(t *testing.T) { assertEqual(t, true, DefaultClient.transport != nil) } +func TestSetScheme(t *testing.T) { + DefaultClient = dc() + + SetScheme("http") + + assertEqual(t, true, DefaultClient.scheme == "http") +} + func TestClientOptions(t *testing.T) { SetHTTPMode().SetContentLength(true) assertEqual(t, Mode(), "http") @@ -1301,6 +1309,9 @@ func TestClientOptions(t *testing.T) { SetDebug(true) assertEqual(t, DefaultClient.Debug, true) + SetScheme("http") + assertEqual(t, DefaultClient.scheme, "http") + SetLogger(ioutil.Discard) }