request请求封装
最后编辑于 2025 年 4 月 19 日
import requests
from common.log_set import RecordLog
import logging
RecordLog.init_logging()
logger = logging.getLogger(__name__)
class RequestUtil:
sess = requests.Session() # 会话对象,自动保持cookies
# logger = RecordLog.init_logging() # 获取日志器单例
public_params = {} # 类级别公共参数
RecordLog.init_logging()
logger = logging.getLogger(__name__)
def send_request(self, **kwargs):
"""发送请求并记录全链路日志"""
self._preprocess_params(kwargs) # 参数预处理
# --- 记录请求日志 ---
self.logger.info('start......')
self.logger.info("加载请求信息......")
for key, value in kwargs.items():
self.logger.debug(f"Request Param: {key} = {value}") # DEBUG级别日志
# --- 发送请求 ---
try:
self.logger.info("开始发送请求......")
response = self.sess.request(**kwargs) # 解包参数字典
except Exception as e:
self.logger.error(f"Request failed: {str(e)}") # 记录错误日志
raise # 重新抛出异常,保持原有堆栈信息
# --- 记录响应日志 ---
self.logger.info(f"响应码 [Status: {response.status_code}]")
self.logger.debug(f"响应头: {response.headers}")
self.logger.debug(f"响应信息: {response.text[:500]}......只显示500字符") # 截断防止日志过大
return response
def _preprocess_params(self, kwargs):
"""参数预处理(私有方法)"""
# 合并公共参数
if 'params' in kwargs:
kwargs['params'].update(self.public_params) # 原地修改参数字典
# 自动处理文件上传
if 'files' in kwargs:
kwargs['files'] = {
name: open(path, 'rb') # 以二进制模式打开文件
for name, path in kwargs['files'].items()
}