gh-99730: urllib.request: Keep HEAD method on redirect (GH-99731)

This commit is contained in:
Harmen Stoppels 2024-05-01 18:01:47 +02:00 committed by GitHub
parent 49baa656cb
commit 759e8e7ab8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 11 additions and 0 deletions

View File

@ -1402,6 +1402,15 @@ class HandlerTests(unittest.TestCase):
request = handler.last_buf
self.assertTrue(request.startswith(expected), repr(request))
def test_redirect_head_request(self):
from_url = "http://example.com/a.html"
to_url = "http://example.com/b.html"
h = urllib.request.HTTPRedirectHandler()
req = Request(from_url, method="HEAD")
fp = MockFile()
new_req = h.redirect_request(req, fp, 302, "Found", {}, to_url)
self.assertEqual(new_req.get_method(), "HEAD")
def test_proxy(self):
u = "proxy.example.com:3128"
for d in dict(http=u), dict(HTTP=u):

View File

@ -650,6 +650,7 @@ class HTTPRedirectHandler(BaseHandler):
newheaders = {k: v for k, v in req.headers.items()
if k.lower() not in CONTENT_HEADERS}
return Request(newurl,
method="HEAD" if m == "HEAD" else "GET",
headers=newheaders,
origin_req_host=req.origin_req_host,
unverifiable=True)

View File

@ -0,0 +1 @@
HEAD requests are no longer upgraded to GET request during redirects in urllib.