Как получить информацию с сайта через websocket

robisho

Активный пользователь
Пользователь
Окт 19, 2020
151
26
28
Добрый день.
Нужно спарсить содержимое сайта через websocket. По-другому не получается. С данным вопросом совершенно не знаком. Поиск в инете выдает варианты, где поднимаются вместе сервер и клиент и между ними идет передача данных. В моем случае, как я понимаю, сервер уже есть, но он чужой. Клиента написал, соединение происходит, request header и responce header в консоль получаю. Если отправить message, то сервер отвечает. Получается, нужно отправить правильный message, чтобы получить нужные данные. Но где его искать, этот правильный запрос? На что обратить внимание в браузере в ответе сервера?
Нужно постоянно получать данные, которые обновляются в режиме реального времени. Подскажите, пожалуйста, куда нужно копать?

Python:
import requests
import websocket


def run_websocket():
    websocket.enableTrace(True)
    ws = websocket.WebSocket()
    ws.connect("wss://b-gql.ggbet.ru/graphql",
            header = {
                'Host': 'b-gql.ggbet.ru',
                'Connection': 'Upgrade',
                'Pragma': 'no-cache',
                'Cache-Control': 'no-cache',
                'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4612.0 Safari/537.36',
                'Upgrade': 'websocket',
                'Origin': 'https://ggbet.ru',
                'Sec-WebSocket-Version': '13',
                'Accept-Encoding': 'gzip, deflate, br',
                'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
                'Sec-WebSocket-Protocol': 'graphql-ws'
    })

    message = 'hello'
    while True:
        try:
            ws.send(f'{message}')
            result = ws.recv()
            print(result)
        except KeyboardInterrupt:
            ws.close()
            break
        except Exception as e:
            print(e)
            break


if __name__ == "__main__":
    run_websocket()


Вот что прилетает в консоль

Код:
--- request header ---
GET /graphql HTTP/1.1
Upgrade: websocket
Host: b-gql.ggbet.ru
Origin: http://b-gql.ggbet.ru
Sec-WebSocket-Key: 4hWny47sZicN2zve/J1N/g==
Connection: Upgrade
Host: b-gql.ggbet.ru
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4612.0 Safari/537.36
Upgrade: websocket
Origin: https://ggbet.ru
Sec-WebSocket-Version: 13
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Sec-WebSocket-Protocol: graphql-ws


-----------------------
--- response header ---
HTTP/1.1 101 Switching Protocols
Date: Mon, 06 Sep 2021 12:13:24 GMT
Connection: upgrade
upgrade: websocket
sec-websocket-accept: NPqHhtUmlOinTgrdwSoHgXJFCc4=
sec-websocket-protocol: graphql-ws
CF-Cache-Status: DYNAMIC
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Server: cloudflare
CF-RAY: 68a79c7119923aa7-DME
alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400, h3-28=":443"; ma=86400, h3-27=":443"; ma=86400
-----------------------
++Sent raw: b'\x81\x85\xa2\xedjN\xca\x88\x06"\xcd'
++Sent decoded: fin=1 opcode=1 data=b'hello'
++Rcv raw: b'\x81@{"payload":{"message":"invalid json"},"type":"connection_error"}'
++Rcv decoded: fin=1 opcode=1 data=b'{"payload":{"message":"invalid json"},"type":"connection_error"}'
{"payload":{"message":"invalid json"},"type":"connection_error"}
++Sent raw: b'\x81\x85\xd7\xe7\xce1\xbf\x82\xa2]\xb8'
++Sent decoded: fin=1 opcode=1 data=b'hello'
++Rcv raw: b'\x88\x10\x03\xeadecoding error'
++Rcv decoded: fin=1 opcode=8 data=b'\x03\xeadecoding error'
++Sent raw: b'\x88\x82l\x82\xf3\xaaoj'
++Sent decoded: fin=1 opcode=8 data=b'\x03\xe8'

++Sent raw: b'\x81\x85G\xea\x1an/\x8fv\x02('
++Sent decoded: fin=1 opcode=1 data=b'hello'
Connection to remote host was lost.
 

Форум IT Специалистов