diff --git a/extra_test.go b/extra_test.go index 94737ff..810676b 100644 --- a/extra_test.go +++ b/extra_test.go @@ -115,7 +115,7 @@ type RedirectSuite struct{ suite.Suite } func (s *RedirectSuite) TestAddRedirectFunctionality() { client := &http.Client{} ro := &RequestOptions{RedirectLimit: 2, SensitiveHTTPHeaders: map[string]struct{}{"Foo": {}}} - addRedirectFunctionality(client, ro) + client = addRedirectFunctionality(client, ro) req1 := httptest.NewRequest("GET", "http://x", nil) req1.Header.Set("Foo", "bar") req2 := httptest.NewRequest("GET", "http://y", nil) diff --git a/request.go b/request.go index 46403ba..e6fe7dd 100644 --- a/request.go +++ b/request.go @@ -194,7 +194,7 @@ func buildRequest(httpMethod, url string, ro *RequestOptions, httpClient *http.C addHTTPHeaders(ro, req) addCookies(ro, req) - addRedirectFunctionality(httpClient, ro) + httpClient = addRedirectFunctionality(httpClient, ro) if ro.Context != nil { req = req.WithContext(ro.Context) diff --git a/utils.go b/utils.go index c91cd23..25c6c10 100644 --- a/utils.go +++ b/utils.go @@ -51,11 +51,13 @@ var ( // because Go's XML library only supports XML encoded in UTF-8 type XMLCharDecoder func(charset string, input io.Reader) (io.Reader, error) -func addRedirectFunctionality(client *http.Client, ro *RequestOptions) { +func addRedirectFunctionality(client *http.Client, ro *RequestOptions) *http.Client { if client.CheckRedirect != nil { - return + return client } - client.CheckRedirect = func(req *http.Request, via []*http.Request) error { + + copied := *client + copied.CheckRedirect = func(req *http.Request, via []*http.Request) error { if ro.RedirectLimit < 0 { return http.ErrUseLastResponse @@ -86,6 +88,8 @@ func addRedirectFunctionality(client *http.Client, ro *RequestOptions) { return nil } + + return &copied } // EnsureTransporterFinalized will ensure that when the HTTP client is GCed