]> jfr.im git - yt-dlp.git/commitdiff
[networking] Fix POST requests with zero-length payloads (#7648)
authorbashonly <redacted>
Thu, 20 Jul 2023 13:23:30 +0000 (08:23 -0500)
committerGitHub <redacted>
Thu, 20 Jul 2023 13:23:30 +0000 (13:23 +0000)
Bugfix for 227bf1a33be7b89cd7d44ad046844c4ccba104f4

Authored by: bashonly

test/test_networking.py
yt_dlp/extractor/ettutv.py
yt_dlp/networking/_urllib.py
yt_dlp/networking/common.py

index b60ed283be27c70f781d8b528e5b192946e8d4bd..3cf587a63777c99cded327491d57d89648743aa6 100644 (file)
@@ -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'}
index 46d7255438c143e3ff033775683016242b73bbcc..133b525556c7c92abbde7d6ccb5352db6644dbd6 100644 (file)
@@ -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')
index 2c5f09872afe6f45644d9d19a6c49e34f41d523f..8a76676d944c42e1c6ba5bbff57048a9c5fe17a7 100644 (file)
@@ -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':
index 458eca39f8265d5dcc4d8cb1f8cb1c1d652749b0..61196406dc59cd0d89311afa9f255ed9955732d3 100644 (file)
@@ -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 {})