关于我之前发布的问题如何发布 aiohttp 认证请求? [重复] 在 Send user credentials in aiohttp request 中得到回答,我将代码修改为以下内容并设法从
get_all_balances()
获得结果,但是在获得结果之前我会遇到以下错误:
未关闭的客户会话 客户会话:
未闭合的连接器 连接:['[( , 613500.125)]'] 连接器:
据我所知,该函数是用
async with
调用的,结果是await
,我的理解是连接会根据结果关闭,所以为什么它给我一个未关闭的客户端会话错误?
import asyncio
import aiohttp
import json
base_url = 'https://api.luno.com'
lapikey = ''
lapisecret = ''
async def do(method, path, req=None, auth=False):
args = {}
params = None
if req:
try:
params = json.loads(json.dumps(req))
except Exception:
params = None
if params:
args = dict(params=params)
url = make_url(path, params)
if auth:
args['auth'] = aiohttp.BasicAuth(lapikey, lapisecret)
async with aiohttp.ClientSession().request(method, url, **args) as res:
try:
return await res.json()
except Exception as e:
return e
def make_url(path, params):
if params:
for k, v in params.items():
path = path.replace('{' + k + '}', str(v))
return base_url + '/' + path.lstrip('/')
async def get_all_balances():
return await do('GET', '/api/1/balance', auth=True)
print(asyncio.run(get_all_balances()))
我已经阅读了关于 aiohttp 未关闭客户端会话的其他类似问题,据我所知,我的代码已经实现了所有必要的
async with
和 await
关键字以在请求后正确关闭客户端会话,有什么问题吗?