mirror of
https://github.com/ytdl-org/youtube-dl.git
synced 2024-01-07 17:16:08 +00:00
[utils] Fix update_Request() with empty data (not None)
This commit is contained in:
parent
411652355f
commit
84ea70f370
|
@ -41,6 +41,7 @@ from youtube_dl.compat import (
|
||||||
|
|
||||||
from youtube_dl.utils import (
|
from youtube_dl.utils import (
|
||||||
sanitized_Request,
|
sanitized_Request,
|
||||||
|
update_Request,
|
||||||
urlencode_postdata,
|
urlencode_postdata,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -395,6 +396,18 @@ class TestHTTP(unittest.TestCase):
|
||||||
headers = ydl.urlopen(r).read().decode('utf-8')
|
headers = ydl.urlopen(r).read().decode('utf-8')
|
||||||
self.assertIn('Content-Type: application/x-www-form-urlencoded', headers)
|
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):
|
def test_cookiejar(self):
|
||||||
with FakeYDL() as ydl:
|
with FakeYDL() as ydl:
|
||||||
ydl.cookiejar.set_cookie(compat_http_cookiejar_Cookie(
|
ydl.cookiejar.set_cookie(compat_http_cookiejar_Cookie(
|
||||||
|
|
|
@ -2996,8 +2996,7 @@ class YoutubeDLRedirectHandler(compat_urllib_request.HTTPRedirectHandler):
|
||||||
# Technically the Cookie header should be in unredirected_hdrs;
|
# Technically the Cookie header should be in unredirected_hdrs;
|
||||||
# however in practice some may set it in normal headers anyway.
|
# however in practice some may set it in normal headers anyway.
|
||||||
# We will remove it here to prevent any leaks.
|
# We will remove it here to prevent any leaks.
|
||||||
# Also remove unwanted and undocumented Host header for old URL
|
remove_headers = ['Cookie']
|
||||||
remove_headers = ['Cookie', 'Host']
|
|
||||||
|
|
||||||
# A 303 must either use GET or HEAD for subsequent request
|
# A 303 must either use GET or HEAD for subsequent request
|
||||||
# https://datatracker.ietf.org/doc/html/rfc7231#section-6.4.4
|
# 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'])
|
remove_headers.extend(['Content-Length', 'Content-Type'])
|
||||||
|
|
||||||
# NB: don't use dict comprehension for python 2.6 compatibility
|
# 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)
|
if k.title() not in remove_headers)
|
||||||
|
|
||||||
return compat_urllib_request.Request(
|
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={}):
|
def update_Request(req, url=None, data=None, headers={}, query={}):
|
||||||
req_headers = req.headers.copy()
|
req_headers = req.headers.copy()
|
||||||
req_headers.update(headers)
|
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_url = update_url_query(url or req.get_full_url(), query)
|
||||||
req_get_method = req.get_method()
|
req_get_method = req.get_method()
|
||||||
if req_get_method == 'HEAD':
|
if req_get_method == 'HEAD':
|
||||||
|
|
Loading…
Reference in a new issue