Commit 56d4c5df by baiquan

refactor(service): 重构抖店请求函数并优化日志配置

- 重构 doudian_request函数,增加重试逻辑并处理 cookies 过期异常
- 修改 shop.py 中的日志配置,按文件大小滚动并保留7天内的日志
parent 7dd526f7
import time
import requests
from loguru import logger
from retrying import retry
......@@ -21,32 +23,40 @@ HEADERS = {
}
@retry(stop_max_attempt_number=3, wait_fixed=3000)
def doudian_request(method: str, url: str, proxies:dict, params:dict=None, data: any = None, json: dict = None,headers=None, cookies=None, match_str="") -> any:
if headers is None:
headers = HEADERS
logger.info(f'doudian_request-->{url}')
method = method.upper()
if method == 'GET':
response = requests.get(url, params=params, headers=headers, cookies=cookies, proxies=proxies)
elif method == 'POST':
response = requests.post(url, json=json, params=params, data=data, headers=headers, cookies=cookies, proxies=proxies)
else:
raise ValueError(f"Unsupported HTTP method: {method}")
# 处理响应
if (response.status_code == 403 and "Forbidden" in response.text) or "登录信息已失效" in response.text or "无权访问此接口" in response.text:
raise CookiesExpiredError("请求失败-->cookies已过期!")
if response.text:
response_data = response.json()
if response_data.get('code') == 0 or response_data.get('status_code') == 0 or response_data.get('success') == 0:
# logger.info(f'send_request响应结果-->{response_data}')
return {
'data': response_data.get('data', {}),
'response_data': response_data
}
elif match_str and match_str in response.text:
return {
'data': response_data.get('data', {}),
'response_data': response_data
}
raise Exception(f"请求失败 --> {response.text}")
\ No newline at end of file
retry_count = 0
while True:
retry_count += 1
if retry_count > 3:
raise Exception('超过重试次数,请求失败')
try:
if headers is None:
headers = HEADERS
logger.info(f'doudian_request-->{url}')
method = method.upper()
if method == 'GET':
response = requests.get(url, params=params, headers=headers, cookies=cookies, proxies=proxies)
elif method == 'POST':
response = requests.post(url, json=json, params=params, data=data, headers=headers, cookies=cookies, proxies=proxies)
else:
raise ValueError(f"Unsupported HTTP method: {method}")
# 处理响应
if (response.status_code == 403 and "Forbidden" in response.text) or "登录信息已失效" in response.text or "无权访问此接口" in response.text:
raise CookiesExpiredError("cookies已过期!")
if response.text:
response_data = response.json()
if response_data.get('code') == 0 or response_data.get('status_code') == 0 or response_data.get('success') == 0:
# logger.info(f'send_request响应结果-->{response_data}')
return {
'data': response_data.get('data', {}),
'response_data': response_data
}
elif match_str and match_str in response.text:
return {
'data': response_data.get('data', {}),
'response_data': response_data
}
raise Exception({response.text})
except CookiesExpiredError as e:
logger.error(f'请求失败-->{e.msg}')
time.sleep(3)
\ No newline at end of file
......@@ -17,7 +17,15 @@ from utils.constant import TaskType
os.makedirs("logs", exist_ok=True)
# 添加日志文件输出,按天滚动
logger.add("logs/shop.log", rotation="1 day", level="INFO", encoding="utf-8", backtrace=True, diagnose=True)
logger.add(
"logs/shop.log",
rotation="40 MB", # 关键修改:设置文件大小限制
level="INFO",
encoding="utf-8",
backtrace=True,
diagnose=True,
retention="7 days", # 可选:保留30天内的日志文件
)
async def syncShop(task: dict = None):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment