Как спарсить данные, которые генерируются websocket'ом?

Добрый день, прошу помощи в решении задачи.

Есть сайт, хотелось бы спарсить данные с него, захожу на него используя base auth.
Внутри сайта есть данные, которые генерятся из websocket. Спарсить средствами bs4 и тд не получается.
Как я понимаю к сокету есть доступ и в обход авторизации так как если зайти на прямую по ссылке сокета
будет сообщение
Only WebSocket mode supported!


Покопавшись в консоли браузера вижу что к сокету идет запрос типа:
{"method":["RequestOpenStat"],"statname":["CurrMaxCallWaitingTime"],"objecttype":["queue"],"timeprofile":["Default"],"objectid":["VQCC2_DIT_Dep_Zdrav_TS@SIPSwitch"],"filter":[""],"frq":["3"],"tenant":["Environment"],"tag":["105300001"]}

И ответы в виде json:
{"timestamp":["1557676913"],"referenceid":["22"],"interval_length":["4489244"],"tag":["105300000"],"string_value":["0"],"eventname":["EventInfo"]}

Пробовал так:
data_orig = {"method":["RequestOpenStat"],"statname":["CurrMaxCallWaitingTime"],"objecttype":["queue"],"timeprofile":["Default"],"objectid":["VQCC2_DIT_Dep_Zdrav_TS@SIPSwitch"],"filter":[""],"frq":["3"],"tenant":["Environment"],"tag":["105300001"]}


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

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

def on_close(ws):
    print("### closed ###")

def on_open(ws):
    def run(*args):
        for i in range(3):
            time.sleep(1)
            ws.send(data_orig)

        time.sleep(1)
        ws.close()
        print("thread terminating...")
    thread.start_new_thread(run, ())

if __name__ == "__main__":
    websocket.enableTrace(True)
    ws = websocket.WebSocketApp("ws://*********",
                              on_message = on_message,
                              on_error = on_error,
                              on_close = on_close)
    ws.on_open = on_open
    ws.run_forever()

Результат выполнения кода запрос и ответ:

--- request header ---
GET /gvcc2/gadapter/ HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: ************
Origin: http://************
Sec-WebSocket-Key: 3dZ81p+lv47xnnEYGLBqPg==
Sec-WebSocket-Version: 13

-----------------------
--- response header ---
Handshake status 404 Not Found
### closed ###
HTTP/1.1 404 Not Found
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Language: en
Content-Length: 981
Date: Sun, 12 May 2019 15:47:04 GMT
-----------------------

Подскажите как получить данные из сокета, или проблема связана с авторизацией, тогда как решить проблему.
  • Вопрос задан
  • 1317 просмотров
Пригласить эксперта
Ответы на вопрос 1
@FulTupFul
Ну прежде всего проблема связана с тем что серверный вебсокет проверяет origin клиента, и если запрос поступает с другого домена, а уже тем более с другого ip адреса то запрос отклоняется.
Можно подделать origin заголовок, но я не знаю насколько это законно.
https://blog.securityevaluators.com/websockets-not...
Ответ написан
Ваш ответ на вопрос

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

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