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

Как подключится к сокетам после авторизации?

Я пытаюсь на практике изучить WebSocket, но столкнулся с трудностями.
На данный момент у меня не получается подключиться к веб-сокету: соединение постоянно закрывается, независимо от моих действий.

Моя цель - подключиться к WebSocket после авторизации и слушать сообщения, возможно, даже запрашивать данные.
Но до этого мне ещё далеко.
Я уже не знаю, что ему не нравится, что он хочет или что ему нужно, чтобы поддерживать соединение или ответить на его запрос.

К сожалению, я не могу предоставить сайт, с которого хочу парсить данные из сокетов, но могу предоставить ответы, запросы и т.д.

import json
import websocket
import http.client

# Функция вызываемая при получении сообщения через WebSocket
def on_message(ws, message):
    print("Received:", message)


# Функция для отправки запроса на сервер и получения токена
def get_token():
    # Данные для отправки в запросе
    login_data = {
        'login': 'Логин',
        'password': 'Пасс'
    }
    # Преобразование данных в формат JSON
    login_json = json.dumps(login_data)
    # Настройки запроса
    headers = {
        'Content-Type': 'application/json',
        'Content-Length': len(login_json)
    }
    conn = http.client.HTTPSConnection('domain', 443)
    conn.request('POST', '/login', login_json, headers)
    response = conn.getresponse()
    # Получение токена из ответа сервера
    token = response.read().decode().strip()
    return token

# Функция для подключения к WebSocket серверу
def connect_to_websocket(token):
    # Формирование заголовков для WebSocket подключения
    headers = {
        'Authorization': f'Bearer {token}'
    }
    # URI для подключения к WebSocket
    uri = 'wss://domain:8443/socket.io/?EIO=4&transport=websocket'
    ws = websocket.WebSocketApp(uri,
                                header=headers,
                                on_open=on_open,
                                on_message=on_message,
                                on_error=on_error,
                                on_close=on_close)
    ws.run_forever()

# Функция вызываемая при открытии соединения с WebSocket
def on_open(ws):
    print('WebSocket connected!')

# Функция вызываемая при возникновении ошибки в WebSocket соединении
def on_error(ws, error):
    print(f'WebSocket error: {error}')

# Функция вызываемая при закрытии соединения с WebSocket
def on_close(ws, close_status_code, close_msg):
    print('WebSocket disconnected!')

if __name__ == '__main__':
    token = get_token()
    connect_to_websocket(token)


Всё что в браузере какие соединения происходят и т.д

С начало автаризациия вроде у меня работает нормально но это не точно
Request URL:
https://domain/login
Request Method:
POST
Status Code:
200 OK
Remote Address:
ip
Referrer Policy:
strict-origin-when-cross-origin
HTTP/1.1 200 OK
X-Frame-Options: Allowed
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
Content-Type: text/html; charset=utf-8
Content-Length: 152
ETag: W/"98-2/HO20Mhv+ahrV0wqQ0gJJURe1I"
Date: Mon, 13 May 2024 07:15:08 GMT
Connection: keep-alive
Keep-Alive: timeout=5
POST /login HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: ru-RU,ru;q=0.8
Connection: keep-alive
Content-Length: 63
Content-Type: application/json;charset=UTF-8
Cookie: timezoneOffset=10800,0; session=s%3A0b868123-123-123-123-733119c10b96.J38l2ahg1g1mr5w4j7664j5cSB%2j76%2BCd3jgVBrY; t=
Host: domain
Origin: https://domain
Referer: https://domain/sessions
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Sec-GPC: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
sec-ch-ua: "Chromium";v="124", "Brave";v="124", "Not-A.Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"

Первое

Request URL:
https://domain:8443/socket.io/?EIO=4&transport=pol...
Request Method:
GET
Status Code:
200 OK
Remote Address:
ip
Referrer Policy:
strict-origin-when-cross-origin
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: text/plain; charset=UTF-8
Content-Length: 118
cache-control: no-store
Date: Mon, 13 May 2024 07:15:08 GMT
Connection: keep-alive
Keep-Alive: timeout=5
GET /socket.io/?EIO=4&transport=polling&t=OzmpX_v HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: ru-RU,ru;q=0.8
Connection: keep-alive
Host: domain:8443
Origin: https://domain
Referer: https://domain/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Sec-GPC: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
sec-ch-ua: "Chromium";v="124", "Brave";v="124", "Not-A.Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"

Response
0{"sid":"8OCxs9q1Zk4LyROqAACr","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":20000,"maxPayload":1000000}

Второе

Request URL:
https://domain:8443/socket.io/?EIO=4&transport=pol...
Request Method:
POST
Status Code:
200 OK
Remote Address:
ip
Referrer Policy:
strict-origin-when-cross-origin
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: text/html
Content-Length: 2
cache-control: no-store
Date: Mon, 13 May 2024 07:15:08 GMT
Connection: keep-alive
Keep-Alive: timeout=5
POST /socket.io/?EIO=4&transport=polling&t=OzmpY58&sid=8OCxs9q1Zk4LyROqAACr HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: ru-RU,ru;q=0.8
Connection: keep-alive
Content-Length: 257
Content-type: text/plain;charset=UTF-8
Host: domain:8443
Origin: https://domain
Referer: https://domain/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Sec-GPC: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
sec-ch-ua: "Chromium";v="124", "Brave";v="124", "Not-A.Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"

Payload

EIO: 4
transport: polling
t: OzmpY58
sid: 8OCxs9q1Zk4LyROqAACr
40{"t":"eyJhb12f1fpXVCJ9.eyJpZCI6OSwicCI6MTcxODE3NjUwOH0.kZnuMPPeBeS4-yxkshaGXeoqdElHw3C1wMdbLC2Hiu4","c":"s%3A0b123f1f-d666-495d-ad8d-73311421fb96.J38l2ahPBf12f124j5cSB%2BbCW%2BCd3jgVBrY"}

Response: ok

Третье

Request URL:
https://domain:8443/socket.io/?EIO=4&transport=pol...
Request Method:
GET
Status Code:
200 OK
Remote Address:
ip
Referrer Policy:
strict-origin-when-cross-origin
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: text/plain; charset=UTF-8
Content-Encoding: gzip
Content-Length: 616
cache-control: no-store
Date: Mon, 13 May 2024 07:15:08 GMT
Connection: keep-alive
Keep-Alive: timeout=5
GET /socket.io/?EIO=4&transport=polling&t=OzmpY59&sid=8OCxs9q1Zk4LyROqAACr HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: ru-RU,ru;q=0.8
Connection: keep-alive
Host: domain:8443
Origin: https://domain
Referer: https://domain/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Sec-GPC: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
sec-ch-ua: "Chromium";v="124", "Brave";v="124", "Not-A.Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"

Preview
Полное писать не буду там не чего важного, но и для безопастности
40{"sid":"HZa61YXXQXKih5hrAACs"}42["initData",{"site":{"settings

Четвёртое

Request URL:
https://domain:8443/socket.io/?EIO=4&transport=pol...
Request Method:
GET
Status Code:
200 OK
Remote Address:
ip
Referrer Policy:
strict-origin-when-cross-origin
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: text/plain; charset=UTF-8
Content-Length: 1
cache-control: no-store
Date: Mon, 13 May 2024 07:15:09 GMT
Connection: keep-alive
Keep-Alive: timeout=5
GET /socket.io/?EIO=4&transport=polling&t=OzmpY7n&sid=8OCxs9q1Zk4LyROqAACr HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: ru-RU,ru;q=0.8
Connection: keep-alive
Host: domain:8443
Origin: https://domain
Referer: https://domain/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Sec-GPC: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
sec-ch-ua: "Chromium";v="124", "Brave";v="124", "Not-A.Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"

Response: 6

И уже сам websocket

Request URL:
wss://domain:8443/socket.io/?EIO=4&transport=webso...
Request Method:
GET
Status Code:
101 Switching Protocols
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: cJEALVLVzQSrjCjEcbu8FOphhQU=
Access-Control-Allow-Origin: *
GET wss://domain:8443/socket.io/?EIO=4&transport=webso... HTTP/1.1
Host: domain:8443
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: https://domain
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Sec-GPC: 1
Sec-WebSocket-Key: Ml+tlV2+nbN2pN2D1gx70w==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits


6641c15404f32314890004.png
6641c15c8f6dd011793857.png
  • Вопрос задан
  • 334 просмотра
Подписаться 3 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Everything_is_bad
socket.io это свой собственный протокол, работающий в том числе и поверх вебсокета, так что просто библиотека websocket тебе не поможет, тебе надо либо самим дописать до уровня socket.io, либо взять готовую библиотеку python-socketio
Ответ написан
Ваш ответ на вопрос

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

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