def get_remote_filesize(url, referer, config, notifier=None): if notifier is None: notifier = PixivHelper.dummy_notifier PixivHelper.print_and_log(None, 'Getting remote filesize...') # open with HEAD method, might be expensive req = PixivHelper.create_custom_request(url, config, referer, head=True) file_size = -1 try: br = PixivBrowserFactory.getBrowser(config=config) res = br.open_novisit(req) content_length = res.info()['Content-Length'] if content_length is not None: file_size = int(content_length) else: PixivHelper.print_and_log('info', "\tNo file size information!") res.close() except KeyError: PixivHelper.print_and_log('info', "\tNo file size information!") except mechanize.HTTPError as e: # fix Issue #503 # handle http errors explicit by code if int(e.code) in (404, 500): PixivHelper.print_and_log('info', "\tNo file size information!") else: raise PixivHelper.print_and_log( None, f"Remote filesize = {PixivHelper.size_in_str(file_size)} ({file_size} Bytes)" ) return file_size
def perform_download(url, file_size, filename, overwrite, config, referer=None, notifier=None): if notifier is None: notifier = PixivHelper.dummy_notifier if referer is None: referer = config.referer # actual download PixivHelper.print_and_log(None, '\rStart downloading...', newline=False) # fetch filesize req = PixivHelper.create_custom_request(url, config, referer) br = PixivBrowserFactory.getBrowser(config=config) res = br.open_novisit(req) if file_size < 0: # final check before download for download progress bar. try: content_length = res.info()['Content-Length'] if content_length is not None: file_size = int(content_length) except KeyError: file_size = -1 PixivHelper.print_and_log('info', "\tNo file size information!") (downloadedSize, filename) = PixivHelper.download_image(url, filename, res, file_size, overwrite) res.close() gc.collect() return (downloadedSize, filename)