# trust-ai_1 **Repository Path**: swagglian/trust-ai_1 ## Basic Information - **Project Name**: trust-ai_1 - **Description**: No description available - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 17 - **Created**: 2023-08-25 - **Last Updated**: 2025-06-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README import ssl from urllib import request import os url = "https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/dists/bionic/stable/binary-arm64/Packages.gz" path = "test/Packages.gz" class ProxyUtil: def __init__(self) -> None: self.verify = False self.proxy_handler = self._init_proxy_handler() self.https_handler = self._init_https_handler() @staticmethod def create_unverified_context(): context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) context.verify_mode = ssl.CERT_NONE context.check_hostname = False return context @staticmethod def create_verified_context(): context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) safe_ciphers = [ 'DHE-RSA-AES128-GCM-SHA256', 'DHE-RSA-AES256-GCM-SHA384', 'DHE-DSS-AES128-GCM-SHA256', 'DHE-DSS-AES256-GCM-SHA384', 'DHE-PSK-CHACHA20-POLY1305', 'ECDHE-ECDSA-AES128-GCM-SHA256', 'ECDHE-ECDSA-AES256-GCM-SHA384', 'ECDHE-RSA-AES128-GCM-SHA256', 'ECDHE-RSA-AES256-GCM-SHA384', 'ECDHE-RSA-CHACHA20-POLY1305', 'ECDHE-PSK-CHACHA20-POLY1305', 'DHE-RSA-AES128-CCM', 'DHE-RSA-AES256-CCM', 'DHE-RSA-AES128-CCM8', 'DHE-RSA-AES256-CCM8', 'DHE-RSA-CHACHA20-POLY1305', 'PSK-AES128-CCM', 'PSK-AES256-CCM', 'DHE-PSK-AES128-CCM', 'DHE-PSK-AES256-CCM', 'PSK-AES128-CCM8', 'PSK-AES256-CCM8', 'DHE-PSK-AES128-CCM8', 'DHE-PSK-AES256-CCM8', 'ECDHE-ECDSA-AES128-CCM', 'ECDHE-ECDSA-AES256-CCM', 'ECDHE-ECDSA-AES128-CCM8', 'ECDHE-ECDSA-AES256-CCM8', 'ECDHE-ECDSA-CHACHA20-POLY1305'] context.options |= ssl.OP_NO_SSLv2 context.options |= ssl.OP_NO_SSLv3 context.options |= ssl.OP_NO_TLSv1 context.options |= ssl.OP_NO_TLSv1_1 context.set_ciphers(':'.join(safe_ciphers)) return context @staticmethod def _init_proxy_handler(): return request.ProxyHandler() def build_proxy_handler(self, start_index=0): opener = request.build_opener(self.proxy_handler, self.https_handler) request.install_opener(opener) def _init_https_handler(self): if not self.verify: context = self.create_unverified_context() else: context = self.create_verified_context() return request.HTTPSHandler(context=context) # 确保下载目录存在 os.makedirs(os.path.dirname(path), exist_ok=True) def create_unverified_context(): context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) context.verify_mode = ssl.CERT_NONE context.check_hostname = False return context success_count = 0 max_attempts = 5 # ##带referer proxy_util=ProxyUtil() proxy_util.build_proxy_handler() for i in range(max_attempts): try: request.urlretrieve(url, path) print(f"第{i + 1}次下载成功") success_count += 1 except Exception as e: print(f"第{i + 1}次下载失败,原因:{e}") print(f"总共成功下载次数:{success_count}")