aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordirkf <fieldhouse@gmx.net>2023-07-24 03:30:28 +0100
committerdirkf <fieldhouse@gmx.net>2023-07-25 13:19:43 +0100
commit2b7dd3b2a2d7c6e228a42d1000a6f3296739ff1c (patch)
tree83905f983970d110059630cf9b9f808d4c1a4f84
parent44faa71b19c866b836e4433ddd3e4722ac6d282f (diff)
downloadyoutube-dl-2b7dd3b2a2d7c6e228a42d1000a6f3296739ff1c.tar.xz
[utils] Fix update_Request() with empty data (not None)
-rw-r--r--test/test_http.py13
-rw-r--r--youtube_dl/utils.py7
2 files changed, 16 insertions, 4 deletions
diff --git a/test/test_http.py b/test/test_http.py
index 4ec8e13e3..89580969d 100644
--- a/test/test_http.py
+++ b/test/test_http.py
@@ -41,6 +41,7 @@ from youtube_dl.compat import (
from youtube_dl.utils import (
sanitized_Request,
+ update_Request,
urlencode_postdata,
)
@@ -395,6 +396,18 @@ class TestHTTP(unittest.TestCase):
headers = ydl.urlopen(r).read().decode('utf-8')
self.assertIn('Content-Type: application/x-www-form-urlencoded', headers)
+ def test_update_req(self):
+ req = sanitized_Request('http://example.com')
+ assert req.data is None
+ assert req.get_method() == 'GET'
+ assert not req.has_header('Content-Type')
+ # Test that zero-byte payloads will be sent
+ req = update_Request(req, data=b'')
+ assert req.data == b''
+ assert req.get_method() == 'POST'
+ # yt-dl expects data to be encoded and Content-Type to be added by sender
+ # assert req.get_header('Content-Type') == 'application/x-www-form-urlencoded'
+
def test_cookiejar(self):
with FakeYDL() as ydl:
ydl.cookiejar.set_cookie(compat_http_cookiejar_Cookie(
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py
index 6d798f13a..b5475434f 100644
--- a/youtube_dl/utils.py
+++ b/youtube_dl/utils.py
@@ -2996,8 +2996,7 @@ class YoutubeDLRedirectHandler(compat_urllib_request.HTTPRedirectHandler):
# Technically the Cookie header should be in unredirected_hdrs;
# however in practice some may set it in normal headers anyway.
# We will remove it here to prevent any leaks.
- # Also remove unwanted and undocumented Host header for old URL
- remove_headers = ['Cookie', 'Host']
+ remove_headers = ['Cookie']
# A 303 must either use GET or HEAD for subsequent request
# https://datatracker.ietf.org/doc/html/rfc7231#section-6.4.4
@@ -3016,7 +3015,7 @@ class YoutubeDLRedirectHandler(compat_urllib_request.HTTPRedirectHandler):
remove_headers.extend(['Content-Length', 'Content-Type'])
# NB: don't use dict comprehension for python 2.6 compatibility
- new_headers = dict((k, v) for k, v in req.header_items()
+ new_headers = dict((k, v) for k, v in req.headers.items()
if k.title() not in remove_headers)
return compat_urllib_request.Request(
@@ -4187,7 +4186,7 @@ def update_url_query(url, query):
def update_Request(req, url=None, data=None, headers={}, query={}):
req_headers = req.headers.copy()
req_headers.update(headers)
- req_data = data or req.data
+ req_data = data if data is not None else req.data
req_url = update_url_query(url or req.get_full_url(), query)
req_get_method = req.get_method()
if req_get_method == 'HEAD':