feat(card): 增加请求重试,异常错误提醒
This commit is contained in:
16
core/app.py
16
core/app.py
@@ -6,13 +6,13 @@
|
|||||||
# @Desc :
|
# @Desc :
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import redis.asyncio as aioredis
|
from fastapi import FastAPI, Request, status
|
||||||
from fastapi import FastAPI, Request, Response, status
|
|
||||||
from fastapi.responses import UJSONResponse
|
from fastapi.responses import UJSONResponse
|
||||||
from fastapi.exceptions import HTTPException, RequestValidationError
|
from fastapi.exceptions import HTTPException, RequestValidationError
|
||||||
from fastapi_limiter import FastAPILimiter
|
from fastapi_limiter import FastAPILimiter
|
||||||
|
|
||||||
from config import settings
|
from config import settings
|
||||||
|
from core.base.exceptions import CardBookException
|
||||||
from core.db.engine import get_cache
|
from core.db.engine import get_cache
|
||||||
from core.routers.route import routers
|
from core.routers.route import routers
|
||||||
from core.routers.chat.handlers import socket_manager
|
from core.routers.chat.handlers import socket_manager
|
||||||
@@ -76,6 +76,18 @@ def create_app() -> FastAPI:
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@app.exception_handler(CardBookException)
|
||||||
|
async def http_exception_handler(request: Request, exc: Exception):
|
||||||
|
await exception_log(request, exc)
|
||||||
|
return UJSONResponse(
|
||||||
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||||
|
content={
|
||||||
|
'status': status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||||
|
'data': None,
|
||||||
|
'message': str(exc)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
@app.exception_handler(Exception)
|
@app.exception_handler(Exception)
|
||||||
async def http_exception_handler(request: Request, exc: Exception):
|
async def http_exception_handler(request: Request, exc: Exception):
|
||||||
await exception_log(request, exc)
|
await exception_log(request, exc)
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ class SearchCardRetry(ScraperError):
|
|||||||
"""搜索重试"""
|
"""搜索重试"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class SearchCardRetryFail(ScraperError):
|
||||||
|
"""搜索重试失败"""
|
||||||
|
pass
|
||||||
|
|
||||||
class WechatApiError(CardBookException):
|
class WechatApiError(CardBookException):
|
||||||
"""微信开放服务调用api错误"""
|
"""微信开放服务调用api错误"""
|
||||||
|
|||||||
@@ -7,13 +7,13 @@
|
|||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from curl_cffi import requests
|
from curl_cffi import requests, CurlError
|
||||||
from fake_useragent import UserAgent
|
from fake_useragent import UserAgent
|
||||||
from parsel import Selector
|
from parsel import Selector
|
||||||
from simple_spider_tool import jsonpath, regx_match, format_json
|
from simple_spider_tool import jsonpath, regx_match, format_json
|
||||||
|
|
||||||
from config import settings
|
from config import settings
|
||||||
from core.base.exceptions import SearchCardNotFound, SearchCardRetry
|
from core.base.exceptions import SearchCardNotFound, SearchCardRetry, SearchCardRetryFail
|
||||||
from core.utils.helper import async_retry
|
from core.utils.helper import async_retry
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -46,6 +46,7 @@ class SiteApi:
|
|||||||
data=None,
|
data=None,
|
||||||
json=None,
|
json=None,
|
||||||
use_abroad_proxy: bool = False,
|
use_abroad_proxy: bool = False,
|
||||||
|
retry_num: int = 3,
|
||||||
**kwargs
|
**kwargs
|
||||||
):
|
):
|
||||||
headers = {
|
headers = {
|
||||||
@@ -59,11 +60,19 @@ class SiteApi:
|
|||||||
'http': settings.OVERSEAS_PROXY,
|
'http': settings.OVERSEAS_PROXY,
|
||||||
'https': settings.OVERSEAS_PROXY
|
'https': settings.OVERSEAS_PROXY
|
||||||
}
|
}
|
||||||
r = await self.session.request(
|
|
||||||
method, url, headers=headers, params=params, data=data, json=json, **kwargs
|
for i in range(retry_num):
|
||||||
)
|
try:
|
||||||
logger.debug(f'耗时:{url} {r.elapsed}')
|
r = await self.session.request(
|
||||||
return r
|
method, url, headers=headers, params=params, data=data, json=json, **kwargs
|
||||||
|
)
|
||||||
|
logger.debug(f'耗时:{url} {r.elapsed}')
|
||||||
|
return r
|
||||||
|
|
||||||
|
except CurlError as e:
|
||||||
|
logger.error(e)
|
||||||
|
if i == retry_num - 1:
|
||||||
|
raise SearchCardRetryFail('请重试,如多次无效反馈管理员')
|
||||||
|
|
||||||
async def get(self, url, headers=None, params=None, **kwargs):
|
async def get(self, url, headers=None, params=None, **kwargs):
|
||||||
return await self.request('GET', url, headers=headers, params=params, **kwargs)
|
return await self.request('GET', url, headers=headers, params=params, **kwargs)
|
||||||
|
|||||||
Reference in New Issue
Block a user