#! /usr/bin/python3 # -*- coding: utf-8 -*- # Author: kelvinBen # Github: https://github.com/kelvinBen/AppInfoScanner import sys import config import requests import threading import libs.core as cores from requests.packages import urllib3 from requests.adapters import HTTPAdapter class DownloadThreads(threading.Thread): def __init__(self, input_path, file_name, cache_path, types): threading.Thread.__init__(self) self.url = input_path self.types = types self.cache_path = cache_path self.file_name = file_name def __requset__(self): try: session = requests.Session() session.mount('http://', HTTPAdapter(max_retries=3)) session.mount('https://', HTTPAdapter(max_retries=3)) session.keep_alive = False session.adapters.DEFAULT_RETRIES = 5 urllib3.disable_warnings() if config.method.upper() == "POST": resp = session.post( url=self.url, params=config.data, headers=config.headers, timeout=30) else: resp = session.get(url=self.url, data=config.data, headers=config.headers, timeout=30) if resp.status_code == requests.codes.ok: if self.types == "Android" or self.types == "iOS": count = 0 progress_tmp = 0 length = float(resp.headers['content-length']) with open(self.cache_path, "wb") as f: for chunk in resp.iter_content(chunk_size=512): if chunk: f.write(chunk) count += len(chunk) progress = int(count / length * 100) if progress != progress_tmp: progress_tmp = progress print("\r", end="") print( "[*] Download progress: {}%: ".format(progress), "▋" * (progress // 2), end="") sys.stdout.flush() f.close() else: html = resp.text with open(self.cache_path, "w", encoding='utf-8', errors='ignore') as f: f.write(html) f.close() cores.download_flag = True except Exception as e: raise Exception(e) def run(self): threadLock = threading.Lock() self.__requset__()