From 71baa490ebd3655746430f208a9b605d120cd315 Mon Sep 17 00:00:00 2001 From: bashonly <88596187+bashonly@users.noreply.github.com> Date: Thu, 20 Jul 2023 08:23:30 -0500 Subject: [PATCH] [networking] Fix POST requests with zero-length payloads (#7648) Bugfix for 227bf1a33be7b89cd7d44ad046844c4ccba104f4 Authored by: bashonly --- test/test_networking.py | 11 +++++++++++ yt_dlp/extractor/ettutv.py | 2 +- yt_dlp/networking/_urllib.py | 2 +- yt_dlp/networking/common.py | 2 +- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/test/test_networking.py b/test/test_networking.py index b60ed283b..3cf587a63 100644 --- a/test/test_networking.py +++ b/test/test_networking.py @@ -1280,6 +1280,17 @@ class TestRequest: req.data = b'test3' assert req.headers.get('Content-Type') == 'application/x-www-form-urlencoded' + def test_update_req(self): + req = Request('http://example.com') + assert req.data is None + assert req.method == 'GET' + assert 'Content-Type' not in req.headers + # Test that zero-byte payloads will be sent + req.update(data=b'') + assert req.data == b'' + assert req.method == 'POST' + assert req.headers.get('Content-Type') == 'application/x-www-form-urlencoded' + def test_proxies(self): req = Request(url='http://example.com', proxies={'http': 'http://127.0.0.1:8080'}) assert req.proxies == {'http': 'http://127.0.0.1:8080'} diff --git a/yt_dlp/extractor/ettutv.py b/yt_dlp/extractor/ettutv.py index 46d725543..133b52555 100644 --- a/yt_dlp/extractor/ettutv.py +++ b/yt_dlp/extractor/ettutv.py @@ -41,7 +41,7 @@ class EttuTvIE(InfoExtractor): 'device': 'desktop', }) - stream_response = self._download_json(player_settings['streamAccess'], video_id, data={}) + stream_response = self._download_json(player_settings['streamAccess'], video_id, data=b'') formats, subtitles = self._extract_m3u8_formats_and_subtitles( stream_response['data']['stream'], video_id, 'mp4') diff --git a/yt_dlp/networking/_urllib.py b/yt_dlp/networking/_urllib.py index 2c5f09872..8a76676d9 100644 --- a/yt_dlp/networking/_urllib.py +++ b/yt_dlp/networking/_urllib.py @@ -315,7 +315,7 @@ class HEADRequest(urllib.request.Request): def update_Request(req, url=None, data=None, headers=None, query=None): req_headers = req.headers.copy() req_headers.update(headers or {}) - 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': diff --git a/yt_dlp/networking/common.py b/yt_dlp/networking/common.py index 458eca39f..61196406d 100644 --- a/yt_dlp/networking/common.py +++ b/yt_dlp/networking/common.py @@ -425,7 +425,7 @@ class Request: raise TypeError('headers must be a mapping') def update(self, url=None, data=None, headers=None, query=None): - self.data = data or self.data + self.data = data if data is not None else self.data self.headers.update(headers or {}) self.url = update_url_query(url or self.url, query or {})