From a778ac5d76c47f6cc88846d58263c63ae8eaec86 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Thu, 3 Dec 2015 18:58:05 +0000 Subject: [PATCH] net/http: make Client follow redirects even if Request.Method is empty Fixes #12705 Change-Id: I69639d2b03777835b2697ff349a00ccab410aa49 Reviewed-on: https://go-review.googlesource.com/17318 Reviewed-by: Burcu Dogan Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- src/net/http/client.go | 5 ++++- src/net/http/client_test.go | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/net/http/client.go b/src/net/http/client.go index 47f145a0ca..3a8b284859 100644 --- a/src/net/http/client.go +++ b/src/net/http/client.go @@ -172,7 +172,7 @@ func (c *Client) send(req *Request) (*Response, error) { // // Generally Get, Post, or PostForm will be used instead of Do. func (c *Client) Do(req *Request) (resp *Response, err error) { - if req.Method == "GET" || req.Method == "HEAD" { + if req.Method == "" || req.Method == "GET" || req.Method == "HEAD" { return c.doFollowingRedirects(req, shouldRedirectGet) } if req.Method == "POST" || req.Method == "PUT" { @@ -423,6 +423,9 @@ func (c *Client) doFollowingRedirects(ireq *Request, shouldRedirect func(int) bo } method := ireq.Method + if method == "" { + method = "GET" + } urlErr := &url.Error{ Op: method[0:1] + strings.ToLower(method[1:]), URL: urlStr, diff --git a/src/net/http/client_test.go b/src/net/http/client_test.go index 40d5109862..e59ab2cd0e 100644 --- a/src/net/http/client_test.go +++ b/src/net/http/client_test.go @@ -230,6 +230,13 @@ func TestClientRedirects(t *testing.T) { t.Errorf("with default client Do, expected error %q, got %q", e, g) } + // Requests with an empty Method should also redirect (Issue 12705) + greq.Method = "" + _, err = c.Do(greq) + if e, g := "Get /?n=10: stopped after 10 redirects", fmt.Sprintf("%v", err); e != g { + t.Errorf("with default client Do and empty Method, expected error %q, got %q", e, g) + } + var checkErr error var lastVia []*Request c = &Client{CheckRedirect: func(_ *Request, via []*Request) error { -- 2.50.0