mirror of
https://github.com/golang/go
synced 2024-11-18 04:54:49 -07:00
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 <jbd@google.com> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
723605e918
commit
a778ac5d76
@ -172,7 +172,7 @@ func (c *Client) send(req *Request) (*Response, error) {
|
|||||||
//
|
//
|
||||||
// Generally Get, Post, or PostForm will be used instead of Do.
|
// Generally Get, Post, or PostForm will be used instead of Do.
|
||||||
func (c *Client) Do(req *Request) (resp *Response, err error) {
|
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)
|
return c.doFollowingRedirects(req, shouldRedirectGet)
|
||||||
}
|
}
|
||||||
if req.Method == "POST" || req.Method == "PUT" {
|
if req.Method == "POST" || req.Method == "PUT" {
|
||||||
@ -423,6 +423,9 @@ func (c *Client) doFollowingRedirects(ireq *Request, shouldRedirect func(int) bo
|
|||||||
}
|
}
|
||||||
|
|
||||||
method := ireq.Method
|
method := ireq.Method
|
||||||
|
if method == "" {
|
||||||
|
method = "GET"
|
||||||
|
}
|
||||||
urlErr := &url.Error{
|
urlErr := &url.Error{
|
||||||
Op: method[0:1] + strings.ToLower(method[1:]),
|
Op: method[0:1] + strings.ToLower(method[1:]),
|
||||||
URL: urlStr,
|
URL: urlStr,
|
||||||
|
@ -230,6 +230,13 @@ func TestClientRedirects(t *testing.T) {
|
|||||||
t.Errorf("with default client Do, expected error %q, got %q", e, g)
|
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 checkErr error
|
||||||
var lastVia []*Request
|
var lastVia []*Request
|
||||||
c = &Client{CheckRedirect: func(_ *Request, via []*Request) error {
|
c = &Client{CheckRedirect: func(_ *Request, via []*Request) error {
|
||||||
|
Loading…
Reference in New Issue
Block a user