Only the path should be encoded (not the query, otherwise it makes a wrong redirection).
authorJérémy Bethmont <jeremy.bethmont@gmail.com>
Fri, 2 Sep 2011 13:06:58 +0000 (15:06 +0200)
committerJérémy Bethmont <jeremy.bethmont@gmail.com>
Fri, 2 Sep 2011 13:06:58 +0000 (15:06 +0200)
requests/models.py

index 2d7fc8fe2fd436eaf478d9a2ff3c671548649127..4af0597d4261af96a72c5f1596647524edd04aef 100644 (file)
@@ -224,8 +224,11 @@ class Request(object):
 
                 # Facilitate non-RFC2616-compliant 'location' headers
                 # (e.g. '/path/to/resource' instead of 'http://domain.tld/path/to/resource')
-                if not urlparse(url).netloc:
-                    url = urljoin(r.url, urllib.quote(urllib.unquote(url)))
+                parsed_url = urlparse(url)
+                if not parsed_url.netloc:
+                    parsed_url = list(parsed_url)
+                    parsed_url[2] = urllib.quote(urllib.unquote(parsed_url[2]))
+                    url = urljoin(r.url, str(urlunparse(parsed_url)))
 
                 # http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4
                 if r.status_code is codes.see_other: