diff --git a/gallery_dl/download.py b/gallery_dl/download.py index 8e1fa2bf..04f0ca5b 100644 --- a/gallery_dl/download.py +++ b/gallery_dl/download.py @@ -19,7 +19,7 @@ class DownloadManager(): def __init__(self, opts, conf): self.opts = opts self.conf = conf - self.downloaders = {} + self.modules = {} self.extractors = ExtractorFinder(conf) def add(self, url): @@ -28,10 +28,10 @@ class DownloadManager(): def get_downloader_module(self, scheme): """Return a downloader module suitable for 'scheme'""" - module = self.downloaders.get(scheme) + module = self.modules.get(scheme) if module is None: module = importlib.import_module(".downloader."+scheme, __package__) - self.downloaders[scheme] = module + self.modules[scheme] = module return module def get_base_directory(self): @@ -58,6 +58,12 @@ class DownloadJob(): if msg[0] == Message.Url: self.download(msg) + elif msg[0] == Message.Headers: + self.get_downloader("http:").set_headers(msg[1]) + + elif msg[0] == Message.Cookies: + self.get_downloader("http:").set_cookies(msg[1]) + elif msg[0] == Message.Directory: self.set_directory(msg) diff --git a/gallery_dl/downloader/http.py b/gallery_dl/downloader/http.py index 5f2a245c..4423c7c4 100644 --- a/gallery_dl/downloader/http.py +++ b/gallery_dl/downloader/http.py @@ -40,3 +40,15 @@ class Downloader(BasicDownloader): for data in response.iter_content(16384): file.write(data) return tries + + def set_headers(self, headers): + self.set_dict(self.session.headers, headers) + + def set_cookies(self, cookies): + self.set_dict(self.session.cookies, cookies) + + @staticmethod + def set_dict(dest, src): + dest.clear() + dest.update(src) + diff --git a/gallery_dl/extractor/common.py b/gallery_dl/extractor/common.py index a34daadf..235cb856 100644 --- a/gallery_dl/extractor/common.py +++ b/gallery_dl/extractor/common.py @@ -20,6 +20,8 @@ class Message(): Version = 1 Directory = 2 Url = 3 + Headers = 4 + Cookies = 5 class Extractor():