[networking] Fix POST requests with zero-length payloads (#7648)

Bugfix for 227bf1a33b

Authored by: bashonly
This commit is contained in:
bashonly 2023-07-20 08:23:30 -05:00 committed by GitHub
parent 613dbce177
commit 71baa490eb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 14 additions and 3 deletions

View file

@ -1280,6 +1280,17 @@ def test_content_type_header(self):
req.data = b'test3' req.data = b'test3'
assert req.headers.get('Content-Type') == 'application/x-www-form-urlencoded' 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): def test_proxies(self):
req = Request(url='http://example.com', proxies={'http': 'http://127.0.0.1:8080'}) req = Request(url='http://example.com', proxies={'http': 'http://127.0.0.1:8080'})
assert req.proxies == {'http': 'http://127.0.0.1:8080'} assert req.proxies == {'http': 'http://127.0.0.1:8080'}

View file

@ -41,7 +41,7 @@ def _real_extract(self, url):
'device': 'desktop', '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( formats, subtitles = self._extract_m3u8_formats_and_subtitles(
stream_response['data']['stream'], video_id, 'mp4') stream_response['data']['stream'], video_id, 'mp4')

View file

@ -315,7 +315,7 @@ def get_method(self):
def update_Request(req, url=None, data=None, headers=None, query=None): def update_Request(req, url=None, data=None, headers=None, query=None):
req_headers = req.headers.copy() req_headers = req.headers.copy()
req_headers.update(headers or {}) 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_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':

View file

@ -425,7 +425,7 @@ def headers(self, new_headers: Mapping):
raise TypeError('headers must be a mapping') raise TypeError('headers must be a mapping')
def update(self, url=None, data=None, headers=None, query=None): 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.headers.update(headers or {})
self.url = update_url_query(url or self.url, query or {}) self.url = update_url_query(url or self.url, query or {})