From: Russ Cox Date: Thu, 20 Jan 2011 17:50:27 +0000 (-0500) Subject: http: follow relative redirect in Get X-Git-Tag: weekly.2011-02-01~121 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=8b8cd0e4c4005a709ac6d2203e1efbd397da5125;p=gostls13.git http: follow relative redirect in Get Fixes #1431. R=bradfitz, dangabrad CC=golang-dev https://golang.org/cl/4077042 --- diff --git a/src/pkg/http/client.go b/src/pkg/http/client.go index 29678ee32a..022f4f124a 100644 --- a/src/pkg/http/client.go +++ b/src/pkg/http/client.go @@ -120,6 +120,7 @@ func Get(url string) (r *Response, finalURL string, err os.Error) { // TODO: if/when we add cookie support, the redirected request shouldn't // necessarily supply the same cookies as the original. // TODO: set referrer header on redirects. + var base *URL for redirect := 0; ; redirect++ { if redirect >= 10 { err = os.ErrorString("stopped after 10 redirects") @@ -127,7 +128,12 @@ func Get(url string) (r *Response, finalURL string, err os.Error) { } var req Request - if req.URL, err = ParseURL(url); err != nil { + if base == nil { + req.URL, err = ParseURL(url) + } else { + req.URL, err = base.ParseURL(url) + } + if err != nil { break } url = req.URL.String() @@ -140,6 +146,7 @@ func Get(url string) (r *Response, finalURL string, err os.Error) { err = os.ErrorString(fmt.Sprintf("%d response missing Location header", r.StatusCode)) break } + base = req.URL continue } finalURL = url