Dunaevlad
@Dunaevlad

Как декодировать ответ сокета?

Получаю данные от сокета winline, но не получается полностью декодировать ответ

import websocket
import rel
import zlib


host = "wss://wss.winline.ru/data_ng?client=site",
headers = {
    # "Host": "wss.winline.ru",
    "Connection": "Upgrade",
    "Pragma": "no-cache",
    "Cache-Control": "no-cache",
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36",
    "Upgrade": "websocket",
    "Origin": "https://winline.ru",
    "Sec-WebSocket-Version": "13",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "en-US,en;q=0.9",
    "Sec-WebSocket-Key": "1pxSfn+NchYmdH0xnLscEg==",
    "Sec-WebSocket-Extensions": "permessage-deflate; client_max_window_bits",
}


def pako(raw):
    decompress = zlib.decompressobj(+31)
    decompressed_data = decompress.decompress(raw)
    decompressed_data += decompress.flush()

    print(decompressed_data)


def on_message(ws, message):
    pako(message)


def on_error(ws, error):
    print(error)


def on_close(ws, close_status_code, close_msg):
    print("### closed ###")


def on_open(ws):
    print("[*Opened connection]")
    print(f"[+] Send {'lang'}")
    ws.send("lang")
    print(f"[+] Send {'AA=='}")
    ws.send("AA==")
    print(f"[+] Send {'data'}")
    ws.send("data")
    print(f"[+] Send {'WINLINE'}")
    ws.send("WINLINE")
    print(f"[+] Send {'getdate'}")
    ws.send("getdate")


if __name__ == "__main__":
    websocket.enableTrace(True)
    ws = websocket.WebSocketApp(url="wss://wss.winline.ru/data_ng?client=site",
                                on_open=on_open,
                                on_message=on_message,
                                on_error=on_error,
                                on_close=on_close,
                                header=headers)

    ws.run_forever(dispatcher=rel)  # Set dispatcher to automatic reconnection
    rel.signal(2, rel.abort)  # Keyboard Interrupt
    rel.dispatch()
    websocket.enableTrace(True)


Какие - то данные декодируются, но в основном нет.
Вроде бы они используют packo.js encode, но у меня все равно не получается полностью декодировать ответ
  • Вопрос задан
  • 236 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы