| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- # -*- coding: utf-8 -*-
- # Author : Charley
- # Python : 3.8.10
- # Date : 2025/4/14 11:58
- import inspect
- import requests
- from loguru import logger
- from tenacity import retry, stop_after_attempt, wait_fixed
- logger.remove()
- logger.add("./logs/{time:YYYYMMDD}.log", encoding='utf-8', rotation="00:00",
- format="[{time:YYYY-MM-DD HH:mm:ss.SSS}] {level} {message}",
- level="DEBUG", retention="7 day")
- HEADERS = {
- "User-Agent": "Dart/3.6 (dart:io)"
- }
- def after_log(retry_state):
- """
- retry 回调
- :param retry_state: RetryCallState 对象
- """
- # 检查 args 是否存在且不为空
- if retry_state.args and len(retry_state.args) > 0:
- log = retry_state.args[0] # 获取传入的 logger
- else:
- log = logger # 使用全局 logger
- if retry_state.outcome.failed:
- log.warning(
- f"Function '{retry_state.fn.__name__}', Attempt {retry_state.attempt_number} Times")
- else:
- log.info(f"Function '{retry_state.fn.__name__}', Attempt {retry_state.attempt_number} succeeded")
- @retry(stop=stop_after_attempt(5), wait=wait_fixed(1), after=after_log)
- def get_proxys(log):
- """
- 获取代理
- :return: 代理
- """
- tunnel = "x371.kdltps.com:15818"
- kdl_username = "t13753103189895"
- kdl_password = "o0yefv6z"
- try:
- proxies = {
- "http": "http://%(user)s:%(pwd)s@%(proxy)s/" % {"user": kdl_username, "pwd": kdl_password, "proxy": tunnel},
- "https": "http://%(user)s:%(pwd)s@%(proxy)s/" % {"user": kdl_username, "pwd": kdl_password, "proxy": tunnel}
- }
- return proxies
- except Exception as e:
- log.error(f"Error getting proxy: {e}")
- raise e
- @retry(stop=stop_after_attempt(5), wait=wait_fixed(1), after=after_log)
- def make_request(log, method, url, params=None, data=None, headers=None, proxies=None, timeout=22, token=None):
- """
- 通用请求函数
- :param log: logger对象
- :param method: 请求方法 ('GET' 或 'POST')
- :param url: 请求的URL
- :param params: GET请求的查询参数
- :param data: POST请求的数据
- :param headers: 请求头
- :param proxies: 代理
- :param timeout: 请求超时时间
- :param token: token
- :return: 响应的JSON数据
- """
- if not log:
- log = logger
- if headers is None:
- headers = HEADERS
- if not token:
- token = "a-2df1084f01cb48f2ab67806867fea37f"
- headers["authorization"] = token
- if proxies is None:
- proxies = get_proxys(log)
- try:
- with requests.Session() as session:
- if method.upper() == 'GET':
- response = session.get(url, headers=headers, params=params, proxies=proxies, timeout=timeout)
- elif method.upper() == 'POST':
- response = session.post(url, headers=headers, json=data, proxies=proxies, timeout=timeout)
- else:
- log.error(f"Unsupported request method: {method}")
- return {}
- response.raise_for_status()
- data = response.json()
- if data["code"] == 200:
- log.info(f"Successfully fetched {method} request to {url}")
- return data
- else:
- log.warning(f"Warning {inspect.currentframe().f_code.co_name}: {data['msg']}")
- return {}
- except requests.exceptions.RequestException as e:
- log.error(f"Error making {method} request to {url}: {e}")
- raise e
- except ValueError as e:
- log.error(f"Error parsing JSON for {method} request to {url}: {e}")
- raise e
- except Exception as e:
- log.error(f"Error making {method} request to {url}: {e}")
- raise e
|