Added support for -location
diff --git a/httplib2/__init__.py b/httplib2/__init__.py
index 8a55408..2f58afb 100644
--- a/httplib2/__init__.py
+++ b/httplib2/__init__.py
@@ -637,6 +637,7 @@
response['location'] = urlparse.urljoin(absolute_uri, location)
if response.status == 301 and method in ["GET", "HEAD"]:
response['-x-permanent-redirect-url'] = response['location']
+ response['-location'] = absolute_uri
_updateCache(headers, response, content, self.cache, cachekey)
if headers.has_key('if-none-match'):
del headers['if-none-match']
@@ -645,6 +646,7 @@
if response.has_key('location'):
location = response['location']
old_response = copy.deepcopy(response)
+ old_response['-location'] = absolute_uri
redirect_method = ((response.status == 303) and (method not in ["GET", "HEAD"])) and "GET" or method
(response, content) = self.request(location, redirect_method, body=body, headers = headers, redirections = redirections - 1)
response.previous = old_response
@@ -652,6 +654,7 @@
raise RedirectLimit( _("Redirected more times than rediection_limit allows."))
elif response.status in [200, 203] and method == "GET":
# Don't cache 206's since we aren't going to handle byte range requests
+ response['-location'] = absolute_uri
_updateCache(headers, response, content, self.cache, cachekey)
return (response, content)
diff --git a/httplib2test.py b/httplib2test.py
index 50bf0f2..84f83a2 100755
--- a/httplib2test.py
+++ b/httplib2test.py
@@ -130,14 +130,18 @@
# Test that we automatically follow 301 redirects
# and that we cache the 301 response
uri = urlparse.urljoin(base, "301/onestep.asis")
+ destination = urlparse.urljoin(base, "302/final-destination.txt")
(response, content) = self.http.request(uri, "GET")
self.assertEqual(response.status, 200)
+ self.assertTrue(response.has_key('-location'))
+ self.assertEqual(response['-location'], destination)
self.assertEqual(content, "This is the final destination.\n")
self.assertEqual(response.previous.status, 301)
self.assertEqual(response.previous.fromcache, False)
(response, content) = self.http.request(uri, "GET")
self.assertEqual(response.status, 200)
+ self.assertEqual(response['-location'], destination)
self.assertEqual(content, "This is the final destination.\n")
self.assertEqual(response.previous.status, 301)
self.assertEqual(response.previous.fromcache, True)
@@ -146,8 +150,10 @@
# Test that we automatically follow 302 redirects
# and that we DO NOT cache the 302 response
uri = urlparse.urljoin(base, "302/onestep.asis")
+ destination = urlparse.urljoin(base, "302/final-destination.txt")
(response, content) = self.http.request(uri, "GET")
self.assertEqual(response.status, 200)
+ self.assertEqual(response['-location'], destination)
self.assertEqual(content, "This is the final destination.\n")
self.assertEqual(response.previous.status, 302)
self.assertEqual(response.previous.fromcache, False)
@@ -156,9 +162,11 @@
(response, content) = self.http.request(uri, "GET")
self.assertEqual(response.status, 200)
self.assertEqual(response.fromcache, True)
+ self.assertEqual(response['-location'], destination)
self.assertEqual(content, "This is the final destination.\n")
self.assertEqual(response.previous.status, 302)
self.assertEqual(response.previous.fromcache, False)
+ self.assertEqual(response.previous['-location'], uri)
uri = urlparse.urljoin(base, "302/twostep.asis")