import asyncio import aiohttp import zlib import struct import json import settings HEADER_LENGTH = 8 async def connect(): data = dict( username=settings.UFP_USERNAME, password=settings.UFP_PASSWORD, rememberMe=True, ) async with aiohttp.ClientSession() as session: async with session.post(settings.UFP_ADDRESS + '/api/auth/login', json=data, ssl=False) as resp: cookie = resp.cookies['TOKEN'] headers = {'cookie': cookie.key + '=' + cookie.value} async with session.ws_connect(settings.UFP_ADDRESS + '/proxy/protect/ws/updates', headers=headers, ssl=False) as ws: async for msg in ws: packet_type, payload_format, deflated, unknown, payload_size = struct.unpack('!bbbbi', msg.data[0:HEADER_LENGTH]) action_start = HEADER_LENGTH action_packet = zlib.decompress(msg.data[action_start:]) data_start = payload_size + 2*HEADER_LENGTH data_packet = zlib.decompress(msg.data[data_start:]) yield json.loads(data_packet.decode()) async def test(): async for msg in connect(): print(msg) if __name__ == '__main__': loop = asyncio.get_event_loop() loop.run_until_complete(test()) loop.close()