From 86371d61b704958e68bed0f9937c6a1ff5fd766e Mon Sep 17 00:00:00 2001 From: Facundo Batista Date: Thu, 7 Feb 2008 19:06:52 +0000 Subject: [PATCH] Fixes Issue 1401. When redirected, a possible POST get converted to GET, so it loses its payload. So, it also must lose the headers related to the payload (if it has no content any more, it shouldn't indicate content length and type). --- Lib/test/test_urllib2.py | 9 +++++++++ Lib/urllib2.py | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py index 90e1771733..a35cbfae84 100644 --- a/Lib/test/test_urllib2.py +++ b/Lib/test/test_urllib2.py @@ -822,6 +822,8 @@ class HandlerTests(unittest.TestCase): method = getattr(h, "http_error_%s" % code) req = Request(from_url, data) req.add_header("Nonsense", "viking=withhold") + if data is not None: + req.add_header("Content-Length", str(len(data))) req.add_unredirected_header("Spam", "spam") try: method(req, MockFile(), code, "Blah", @@ -834,6 +836,13 @@ class HandlerTests(unittest.TestCase): self.assertEqual(o.req.get_method(), "GET") except AttributeError: self.assert_(not o.req.has_data()) + + # now it's a GET, there should not be headers regarding content + # (possibly dragged from before being a POST) + headers = [x.lower() for x in o.req.headers] + self.assertTrue("content-length" not in headers) + self.assertTrue("content-type" not in headers) + self.assertEqual(o.req.headers["Nonsense"], "viking=withhold") self.assert_("Spam" not in o.req.headers) diff --git a/Lib/urllib2.py b/Lib/urllib2.py index 8bf08848b1..d5a539d9db 100644 --- a/Lib/urllib2.py +++ b/Lib/urllib2.py @@ -534,8 +534,11 @@ class HTTPRedirectHandler(BaseHandler): # do the same. # be conciliant with URIs containing a space newurl = newurl.replace(' ', '%20') + newheaders = dict((k,v) for k,v in req.headers.items() + if k.lower() not in ("content-length", "content-type") + ) return Request(newurl, - headers=req.headers, + headers=newheaders, origin_req_host=req.get_origin_req_host(), unverifiable=True) else: -- 2.50.0