Kaydet (Commit) 86371d61 authored tarafından Facundo Batista's avatar Facundo Batista

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).
üst b4ee4a16
...@@ -822,6 +822,8 @@ class HandlerTests(unittest.TestCase): ...@@ -822,6 +822,8 @@ class HandlerTests(unittest.TestCase):
method = getattr(h, "http_error_%s" % code) method = getattr(h, "http_error_%s" % code)
req = Request(from_url, data) req = Request(from_url, data)
req.add_header("Nonsense", "viking=withhold") 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") req.add_unredirected_header("Spam", "spam")
try: try:
method(req, MockFile(), code, "Blah", method(req, MockFile(), code, "Blah",
...@@ -834,6 +836,13 @@ class HandlerTests(unittest.TestCase): ...@@ -834,6 +836,13 @@ class HandlerTests(unittest.TestCase):
self.assertEqual(o.req.get_method(), "GET") self.assertEqual(o.req.get_method(), "GET")
except AttributeError: except AttributeError:
self.assert_(not o.req.has_data()) 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"], self.assertEqual(o.req.headers["Nonsense"],
"viking=withhold") "viking=withhold")
self.assert_("Spam" not in o.req.headers) self.assert_("Spam" not in o.req.headers)
......
...@@ -534,8 +534,11 @@ class HTTPRedirectHandler(BaseHandler): ...@@ -534,8 +534,11 @@ class HTTPRedirectHandler(BaseHandler):
# do the same. # do the same.
# be conciliant with URIs containing a space # be conciliant with URIs containing a space
newurl = newurl.replace(' ', '%20') 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, return Request(newurl,
headers=req.headers, headers=newheaders,
origin_req_host=req.get_origin_req_host(), origin_req_host=req.get_origin_req_host(),
unverifiable=True) unverifiable=True)
else: else:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment