mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	[utils] Fix update_Request() with empty data (not None)
This commit is contained in:
		| @@ -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': | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user