From 42ded0a429c20ec13dc006825e1508d9a02f0ad4 Mon Sep 17 00:00:00 2001 From: bashonly Date: Sat, 15 Jul 2023 15:18:25 -0500 Subject: [PATCH] [fd/external] Fixes to cookie handling - Fix bug in `axel` Cookie header arg - Pass cookies to `curl` as strings - Write session cookies for `aria2c` and `wget` Closes #7539 Authored by: bashonly --- test/test_downloader_external.py | 9 +++++---- yt_dlp/downloader/external.py | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/test/test_downloader_external.py b/test/test_downloader_external.py index e5b02ba5a..d3d74df04 100644 --- a/test/test_downloader_external.py +++ b/test/test_downloader_external.py @@ -68,7 +68,7 @@ class TestAxelFD(unittest.TestCase): ydl.cookiejar.set_cookie(http.cookiejar.Cookie(**TEST_COOKIE)) self.assertEqual( downloader._make_cmd('test', TEST_INFO), - ['axel', '-o', 'test', 'Cookie: test=ytdlp', '--max-redirect=0', '--', 'http://www.example.com/']) + ['axel', '-o', 'test', '-H', 'Cookie: test=ytdlp', '--max-redirect=0', '--', 'http://www.example.com/']) class TestWgetFD(unittest.TestCase): @@ -85,10 +85,11 @@ class TestCurlFD(unittest.TestCase): def test_make_cmd(self): with FakeYDL() as ydl: downloader = CurlFD(ydl, {}) - self.assertNotIn('--cookie-jar', downloader._make_cmd('test', TEST_INFO)) - # Test cookiejar tempfile arg is added + self.assertNotIn('--cookie', downloader._make_cmd('test', TEST_INFO)) + # Test cookie header is added ydl.cookiejar.set_cookie(http.cookiejar.Cookie(**TEST_COOKIE)) - self.assertIn('--cookie-jar', downloader._make_cmd('test', TEST_INFO)) + self.assertIn('--cookie', downloader._make_cmd('test', TEST_INFO)) + self.assertIn('test=ytdlp', downloader._make_cmd('test', TEST_INFO)) class TestAria2cFD(unittest.TestCase): diff --git a/yt_dlp/downloader/external.py b/yt_dlp/downloader/external.py index e307502db..4f52f6e8d 100644 --- a/yt_dlp/downloader/external.py +++ b/yt_dlp/downloader/external.py @@ -137,7 +137,7 @@ class ExternalFD(FragmentFD): self._cookies_tempfile = tmp_cookies.name self.to_screen(f'[download] Writing temporary cookies file to "{self._cookies_tempfile}"') # real_download resets _cookies_tempfile; if it's None then save() will write to cookiejar.filename - self.ydl.cookiejar.save(self._cookies_tempfile) + self.ydl.cookiejar.save(self._cookies_tempfile, ignore_discard=True, ignore_expires=True) return self.ydl.cookiejar.filename or self._cookies_tempfile def _call_downloader(self, tmpfilename, info_dict): @@ -199,8 +199,9 @@ class CurlFD(ExternalFD): def _make_cmd(self, tmpfilename, info_dict): cmd = [self.exe, '--location', '-o', tmpfilename, '--compressed'] - if self.ydl.cookiejar.get_cookie_header(info_dict['url']): - cmd += ['--cookie-jar', self._write_cookies()] + cookie_header = self.ydl.cookiejar.get_cookie_header(info_dict['url']) + if cookie_header: + cmd += ['--cookie', cookie_header] if info_dict.get('http_headers') is not None: for key, val in info_dict['http_headers'].items(): cmd += ['--header', f'{key}: {val}'] @@ -233,7 +234,7 @@ class AxelFD(ExternalFD): cmd += ['-H', f'{key}: {val}'] cookie_header = self.ydl.cookiejar.get_cookie_header(info_dict['url']) if cookie_header: - cmd += [f'Cookie: {cookie_header}', '--max-redirect=0'] + cmd += ['-H', f'Cookie: {cookie_header}', '--max-redirect=0'] cmd += self._configuration_args() cmd += ['--', info_dict['url']] return cmd