cache extracted browser cookies

(in memory, for as long as gallery-dl is running)

Extracting encrypted cookies from a chromium-based browser can take a
long time, so repeating this process for each extractor should be
avoided.

Same goes for creating a temporary copy of the entire cookie database.
pull/2655/head
Mike Fährmann 2 years ago
parent 541a61d344
commit 535cbcb185
No known key found for this signature in database
GPG Key ID: 5680CA389D365A88

@ -302,6 +302,7 @@ class Extractor():
if cookies: if cookies:
if isinstance(cookies, dict): if isinstance(cookies, dict):
self._update_cookies_dict(cookies, self.cookiedomain) self._update_cookies_dict(cookies, self.cookiedomain)
elif isinstance(cookies, str): elif isinstance(cookies, str):
cookiefile = util.expand_path(cookies) cookiefile = util.expand_path(cookies)
try: try:
@ -311,12 +312,27 @@ class Extractor():
self.log.warning("cookies: %s", exc) self.log.warning("cookies: %s", exc)
else: else:
self._cookiefile = cookiefile self._cookiefile = cookiefile
elif isinstance(cookies, (list, tuple)): elif isinstance(cookies, (list, tuple)):
from ..cookies import load_cookies key = tuple(cookies)
try: cookiejar = _browser_cookies.get(key)
load_cookies(self._cookiejar, cookies)
except Exception as exc: if cookiejar is None:
self.log.warning("cookies: %s", exc) from ..cookies import load_cookies
cookiejar = self._cookiejar.__class__()
try:
load_cookies(cookiejar, cookies)
except Exception as exc:
self.log.warning("cookies: %s", exc)
else:
_browser_cookies[key] = cookiejar
else:
self.log.debug("Using cached cookies from %s", key)
setcookie = self._cookiejar.set_cookie
for cookie in cookiejar:
setcookie(cookie)
else: else:
self.log.warning( self.log.warning(
"Expected 'dict', 'list', or 'str' value for 'cookies' " "Expected 'dict', 'list', or 'str' value for 'cookies' "
@ -692,6 +708,7 @@ def _build_requests_adapter(ssl_options, ssl_ciphers, source_address):
_adapter_cache = {} _adapter_cache = {}
_browser_cookies = {}
HTTP_HEADERS = { HTTP_HEADERS = {

Loading…
Cancel
Save