From: bashonly Date: Thu, 20 Jul 2023 13:23:30 +0000 (-0500) Subject: [networking] Fix POST requests with zero-length payloads (#7648) X-Git-Tag: 2023.09.24~142 X-Git-Url: https://jfr.im/git/yt-dlp.git/commitdiff_plain/71baa490ebd3655746430f208a9b605d120cd315 [networking] Fix POST requests with zero-length payloads (#7648) Bugfix for 227bf1a33be7b89cd7d44ad046844c4ccba104f4 Authored by: bashonly --- 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 @@ def test_content_type_header(self): 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 @@ def _real_extract(self, url): '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 @@ def get_method(self): 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 @@ def headers(self, new_headers: Mapping): 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 {})