diff --git a/main.py b/main.py index aefb2b7..cb5ec95 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- import argparse +import asyncio import logging import logging.handlers import os @@ -16,6 +17,7 @@ import services.avatar import services.chat import services.translate import update +import utils.request logger = logging.getLogger(__name__) @@ -37,10 +39,14 @@ def main(): init_logging(args.debug) config.init() + + asyncio.get_event_loop().run_until_complete(utils.request.init()) models.database.init(args.debug) + services.avatar.init() services.translate.init() services.chat.init() + update.check_update() run_server(args.host, args.port, args.debug) diff --git a/services/translate.py b/services/translate.py index 6debfe8..d85c06d 100644 --- a/services/translate.py +++ b/services/translate.py @@ -244,7 +244,7 @@ class TencentTranslateFree(FlowControlTranslateProvider): self._server_time_delta = int((datetime.datetime.now().timestamp() - server_time) * 1000) except (KeyError, ValueError): self._server_time_delta = 0 - except (aiohttp.ClientConnectionError, asyncio.TimeoutError): + except (aiohttp.ClientError, asyncio.TimeoutError): logger.exception('TencentTranslateFree init error:') return False @@ -279,7 +279,7 @@ class TencentTranslateFree(FlowControlTranslateProvider): reauthuri, r.status, r.reason) return False data = await r.json() - except (aiohttp.ClientConnectionError, asyncio.TimeoutError): + except (aiohttp.ClientError, asyncio.TimeoutError): logger.exception('TencentTranslateFree init error:') return False @@ -345,7 +345,7 @@ class TencentTranslateFree(FlowControlTranslateProvider): return None self._update_uc_key(r) data = await r.json() - except (aiohttp.ClientConnectionError, asyncio.TimeoutError): + except (aiohttp.ClientError, asyncio.TimeoutError): return None if data['errCode'] != 0: logger.warning('TencentTranslateFree failed: %d %s', data['errCode'], data['errMsg']) @@ -446,7 +446,7 @@ class TencentTranslate(FlowControlTranslateProvider): logger.warning('TencentTranslate request failed: status=%d %s', r.status, r.reason) return None data = (await r.json())['Response'] - except (aiohttp.ClientConnectionError, asyncio.TimeoutError): + except (aiohttp.ClientError, asyncio.TimeoutError): return None error = data.get('Error', None) if error is not None: @@ -554,7 +554,7 @@ class BaiduTranslate(FlowControlTranslateProvider): logger.warning('BaiduTranslate request failed: status=%d %s', r.status, r.reason) return None data = await r.json() - except (aiohttp.ClientConnectionError, asyncio.TimeoutError): + except (aiohttp.ClientError, asyncio.TimeoutError): return None error_code = data.get('error_code', None) if error_code is not None: diff --git a/utils/request.py b/utils/request.py index fc329a0..186abee 100644 --- a/utils/request.py +++ b/utils/request.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- +from typing import * + import aiohttp # 不带这堆头部有时候也能成功请求,但是带上后成功的概率更高 @@ -9,4 +11,10 @@ BILIBILI_COMMON_HEADERS = { ' Chrome/114.0.0.0 Safari/537.36' } -http_session = aiohttp.ClientSession(timeout=aiohttp.ClientTimeout(total=10)) +http_session: Optional[aiohttp.ClientSession] = None + + +# ClientSession要在异步函数中创建 +async def init(): + global http_session + http_session = aiohttp.ClientSession(timeout=aiohttp.ClientTimeout(total=10))