import logging import os import ssl import urllib.request from collections.abc import Mapping from typing import Any from urllib import parse from urllib.error import HTTPError # Create an SSL context that allows for a lower level of security ssl_context = ssl.create_default_context() ssl_context.set_ciphers("HIGH:!DH:!aNULL") ssl_context.check_hostname = False ssl_context.verify_mode = ssl.CERT_NONE # Create an opener object and pass in a custom SSL context opener = urllib.request.build_opener(urllib.request.HTTPSHandler(context=ssl_context)) urllib.request.install_opener(opener) logger = logging.getLogger(__name__) def http_request(url: str, timeout: int | float, headers: Mapping[str, str] = {}) -> tuple[int, str | None]: try: request = urllib.request.Request(url, headers=dict(headers)) res = urllib.request.urlopen(request, timeout=timeout) body = res.read().decode("utf-8") return res.code, body except HTTPError as e: if e.code == 304: logger.warning("http_request error,code is 304, maybe you should check secret") return 304, None logger.warning("http_request error,code is %d, msg is %s", e.code, e.msg) raise e def url_encode(params: dict[str, Any]) -> str: return parse.urlencode(params) def makedirs_wrapper(path: str) -> None: os.makedirs(path, exist_ok=True)