5
5
from typing import Any , Optional , ClassVar , Union , Dict
6
6
7
7
import aiohttp
8
- from aiohttp import ClientResponse , FormData , ClientTimeout , TCPConnector
8
+ from aiohttp import ClientResponse , FormData , TCPConnector
9
9
10
10
from . import logging
11
11
from .errors import HttpErrorDict , ServerError
@@ -76,33 +76,27 @@ class BotHttp:
76
76
TODO 增加并发请求的锁控制 @veehou
77
77
"""
78
78
79
- def __init__ (self , timeout : int , is_sandbox : bool = False , app_id : str = None , token : str = None ):
79
+ def __init__ (
80
+ self ,
81
+ timeout : int ,
82
+ is_sandbox : bool = False ,
83
+ app_id : str = None ,
84
+ token : str = None ,
85
+ ):
80
86
self .timeout = timeout
81
87
self .is_sandbox = is_sandbox
82
88
83
89
self ._token : Optional [Token ] = None if not app_id else Token (app_id = app_id , access_token = token )
84
- self ._session : Optional [aiohttp .ClientSession ] = None
85
90
self ._global_over : Optional [asyncio .Event ] = None
86
91
self ._headers : Optional [dict ] = None
87
92
88
- async def close (self ) -> None :
89
- if self ._session :
90
- await self ._session .close ()
91
-
92
93
async def check_session (self ):
93
94
if not self ._headers :
94
95
self ._headers = {
95
96
"Authorization" : f"{ self ._token .get_type ()} { self ._token .get_string ()} " ,
96
97
"User-Agent" : "botpy/v1" ,
97
98
}
98
99
99
- if not self ._session or self ._session .closed :
100
- self ._session = aiohttp .ClientSession (
101
- headers = self ._headers ,
102
- timeout = ClientTimeout (self .timeout ),
103
- connector = TCPConnector (limit = 500 , ssl = SSLContext ()),
104
- )
105
-
106
100
async def request (self , route : Route , ** kwargs : Any ):
107
101
# some checking if it's a JSON request
108
102
if "json" in kwargs :
@@ -113,7 +107,7 @@ async def request(self, route: Route, **kwargs: Any):
113
107
for k , v in kwargs .pop ("json" ).items ():
114
108
if v :
115
109
if isinstance (v , dict ):
116
- if k == ' message_reference' :
110
+ if k == " message_reference" :
117
111
_log .error (
118
112
f"[botpy] 接口参数传入异常, 请求连接: { route .url } , "
119
113
f"错误原因: file_image与message_reference不能同时传入,"
@@ -126,8 +120,19 @@ async def request(self, route: Route, **kwargs: Any):
126
120
route .is_sandbox = self .is_sandbox
127
121
_log .debug (f"[botpy] 请求头部: { self ._headers } , 请求方式: { route .method } , 请求url: { route .url } " )
128
122
129
- async with self ._session .request (method = route .method , url = route .url , ** kwargs ) as response :
130
- return await _handle_response (response )
123
+ async with aiohttp .ClientSession (
124
+ headers = self ._headers , connector = TCPConnector (limit = 500 , ssl = SSLContext ())
125
+ ) as session :
126
+ _log .debug (session )
127
+
128
+ async with session .request (
129
+ method = route .method ,
130
+ url = route .url ,
131
+ timeout = (aiohttp .ClientTimeout (total = self .timeout )),
132
+ ** kwargs ,
133
+ ) as response :
134
+ _log .debug (response )
135
+ return await _handle_response (response )
131
136
132
137
async def login (self , token : Token ) -> robot .Robot :
133
138
"""login后保存token和session"""
0 commit comments