mirror of https://github.com/python/cpython
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).
This commit is contained in:
parent
b4ee4a16f4
commit
86371d61b7
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue