|
|
@ -39,6 +39,7 @@ from .compat import ( |
|
|
|
compat_HTMLParser, |
|
|
|
compat_basestring, |
|
|
|
compat_chr, |
|
|
|
compat_cookiejar, |
|
|
|
compat_ctypes_WINFUNCTYPE, |
|
|
|
compat_etree_fromstring, |
|
|
|
compat_expanduser, |
|
|
@ -1139,6 +1140,33 @@ class YoutubeDLHTTPSHandler(compat_urllib_request.HTTPSHandler): |
|
|
|
req, **kwargs) |
|
|
|
|
|
|
|
|
|
|
|
class YoutubeDLCookieJar(compat_cookiejar.MozillaCookieJar): |
|
|
|
def save(self, filename=None, ignore_discard=False, ignore_expires=False): |
|
|
|
# Store session cookies with `expires` set to 0 instead of an empty |
|
|
|
# string |
|
|
|
for cookie in self: |
|
|
|
if cookie.expires is None: |
|
|
|
cookie.expires = 0 |
|
|
|
compat_cookiejar.MozillaCookieJar.save(self, filename, ignore_discard, ignore_expires) |
|
|
|
|
|
|
|
def load(self, filename=None, ignore_discard=False, ignore_expires=False): |
|
|
|
compat_cookiejar.MozillaCookieJar.load(self, filename, ignore_discard, ignore_expires) |
|
|
|
# Session cookies are denoted by either `expires` field set to |
|
|
|
# an empty string or 0. MozillaCookieJar only recognizes the former |
|
|
|
# (see [1]). So we need force the latter to be recognized as session |
|
|
|
# cookies on our own. |
|
|
|
# Session cookies may be important for cookies-based authentication, |
|
|
|
# e.g. usually, when user does not check 'Remember me' check box while |
|
|
|
# logging in on a site, some important cookies are stored as session |
|
|
|
# cookies so that not recognizing them will result in failed login. |
|
|
|
# 1. https://bugs.python.org/issue17164 |
|
|
|
for cookie in self: |
|
|
|
# Treat `expires=0` cookies as session cookies |
|
|
|
if cookie.expires == 0: |
|
|
|
cookie.expires = None |
|
|
|
cookie.discard = True |
|
|
|
|
|
|
|
|
|
|
|
class YoutubeDLCookieProcessor(compat_urllib_request.HTTPCookieProcessor): |
|
|
|
def __init__(self, cookiejar=None): |
|
|
|
compat_urllib_request.HTTPCookieProcessor.__init__(self, cookiejar) |
|
|
|