У меня есть этот код, чтобы взаимодействовать с WebSocket API с помощью async
и websokets
питона библиотеки:Как сохранить сеанс при использовании асинхронных веб-узлов?
#!/usr/bin/env python3
import sys, json
import asyncio
from websockets import connect
class AsyncWebsocket():
async def __aenter__(self):
self._conn = connect('wss://ws.myws.com/v2')
self.websocket = await self._conn.__aenter__()
return self
async def __aexit__(self, *args, **kwargs):
await self._conn.__aexit__(*args, **kwargs)
async def send(self, message):
await self.websocket.send(message)
async def receive(self):
return await self.websocket.recv()
class mtest():
def __init__(self, api_token):
self.aws = AsyncWebsocket()
self.loop = asyncio.get_event_loop()
self.api_token = api_token
self.authorize()
def authorize(self):
jdata = self.__async_exec({
'authorize': self.api_token
})
try:
print (jdata['email'])
ret = True
except:
ret = False
return ret
def sendtest(self):
jdata = self.__async_exec({
"hello": 1
})
print (jdata)
def __async_exec(self, jdata):
try:
ret = json.loads(self.loop.run_until_complete(self.__async_send_recieve(jdata)))
except:
ret = None
return ret
async def __async_send_recieve(self, jdata):
async with self.aws:
await self.aws.send(json.dumps(jdata))
return await self.aws.receive()
Так у меня есть следующие в main.py:
from webclass import *
a = mtest('12341234')
print (a.sendtest())
Проблема заключается в том, что она Безразлично» t сохранить авторизованный сеанс, так что это выходной сигнал:
[email protected]:/home/dinocob# python3 test.py
[email protected]
{'error': {'message': 'Please log in.', 'code': 'AuthorizationRequired'}}
Как вы видите, логин-логин является рабочим ng ok, но при вызове и отправке hello
в функции sendtest
сеанс не совпадает.
- Где разрушается сессия?
- Как я могу его сохранить (без существенного изменения ).
Где вы сохраняете свой авторизованный токен после входа в систему? – MooingRawr
В 'self.api_token' внутри' __init__'. Но он работает нормально; проблема возникает при вызове функции '__async_send_recieve', я думаю ... – harrison4