Задать вопрос
@hghcntrl77

Как решить проблему с подключение к серверу через websocket?

Приветствую
Хотел написать небольшой скрипт для парсинга данных в реальном времени, функционал уже реализован разработчиками сайта, но работает все это дело только в браузере.
Раньше с парсингом дел особых не имел, и тем более с вебсокетом, по этому даже не знаю в какую сторону копать.
В общем проблема следующая, мне удается подключиться, принимать данные 5-10 секунд, после чего идет разрыв соединения с сообщением - received 1008 (policy violation); then sent 1008 (policy violation)

Сервер судя по всему детектит что это не браузер, и рвет коннект, хотя я передаю актуальные куки внутри заголовка, в которых и свежий клаудфлейр айдишник, и ссешн айди. Все как в заголовках которые передает браузер, кроме
sec-websocket-extensions: permessage-deflate; client_max_window_bits
sec-websocket-key: V+rF18z4GSVP5KRDVDxw==
sec-websocket-version: 13

Эти заголовки передать не могу, их видимо генерирует сам клиент при соединении.
Заголовок выглядит следующим образом, пробовал передавать как и больше информации в хедере, так и меньше, итог один - через 5-7 секунд соединение рвется

{
    "Origin": "URL",
    "User-Agent": "AGENT",
    "Cookie": "SESSID=ID; cf_clearance=cloudflare_id"
}

В чем может быть проблема и можно ли как нибудь это обойти?
Тестовый код для соединения выглядит так
import asyncio
import websockets

async def connect():
    try:
        async with websockets.connect(uri, additional_headers=headers) as ws:
            print("Connected!")

            while True:
                message = await ws.recv()
                print(f" Received: {message}")

    except Exception as e:
        print(f" Connection failed: {e}")

asyncio.run(connect())
  • Вопрос задан
  • 379 просмотров
Подписаться 3 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@rPman
Сохрани сессию в браузере в .har файл (консоль разработчика - сеть) и изучи его досканально, в худшем случае придется реверсить скрипты браузера, потому что информацию о том что это браузерный клиент можно передавать даже в таймингах задержек принятия сообщений, т.е. по самим сообщениям этого видно не будет.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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