Приветствую
Хотел написать небольшой скрипт для парсинга данных в реальном времени, функционал уже реализован разработчиками сайта, но работает все это дело только в браузере.
Раньше с парсингом дел особых не имел, и тем более с вебсокетом, по этому даже не знаю в какую сторону копать.
В общем проблема следующая, мне удается подключиться, принимать данные 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())