]> Cypherpunks repositories - gostls13.git/commitdiff
http: follow relative redirect in Get
authorRuss Cox <rsc@golang.org>
Thu, 20 Jan 2011 17:50:27 +0000 (12:50 -0500)
committerRuss Cox <rsc@golang.org>
Thu, 20 Jan 2011 17:50:27 +0000 (12:50 -0500)
Fixes #1431.

R=bradfitz, dangabrad
CC=golang-dev
https://golang.org/cl/4077042

src/pkg/http/client.go

index 29678ee32aefcfa1faca99b727fae08ae287214a..022f4f124a86ed9e3ff4013631590e5909735e2c 100644 (file)
@@ -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