Прослуживание WebSocket чужого сайта на Node.js
Хотел бы узнать, если ты способ "слушать" соккет чужого сайта? Мне казалось, что это должно быть довольно просто, но потратив на этот вопрос около 4 часов, я так ни к чему и не пришел.
В данный момент сервер не возвращает никаких ошибок, но подключится я не могу.
const io = require("socket.io-client")('wss://socket.csgo500.com/socket.io/?EIO=3&transport=websocket', {
transports: ['websocket'],
agent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
});
console.log(io);
io.on('connect', function () {
io.on('message', function (data) {
console.log(data);
});
});
io.on('connect_error', function (err) {
console.log('connect_error');
});
io.on('reconnect_error', function (err) {
console.log('reconnect_error');
});
Ответы (1 шт):
Автор решения: nörbörnën
→ Ссылка
Откроем сайт и посмотрим какие параметры передаются в заголовка при подключении к websocket
Сookie и Origin могут иметь важное значение для подключения.
Попробуем передать их при подключении:
Устанавливаем библиотеку ws
yarn add ws || npm install ws --save
Пишем программу, обратите внимание, что Сookie я подставил не в том виде, что передаётся в заголовках, а предварительно раскодировав decodeURIComponent:
const WebSocket = require('ws');
const ws = new WebSocket(
'wss://socket.csgo500.com/socket.io/?EIO=3&transport=websocket',
{
perMessageDeflate: false,
headers: {
'Cookie': 'express.sid=s:-mcAHEsnhCqJJ9rsCBxCQpFURquWbbaE.flM+FPjDs/4MDuremyq8Y9QJIPHoul/8y0C62BhELTw; __ssid=e2f5d8b81c4d8b50eb11810999db063',
'Origin': 'https://csgo500.com',
}
}
);
ws.on('open', () => console.log('open'));
ws.on('close', (err) => console.log('close', err));
ws.on('error', (err) => console.log('error', err));
ws.on('upgrade', () => console.log('upgrade'));
ws.on('ping', () => console.log('ping'));
ws.on('message', (data) => {
const chank = data.toString().replace(/^\d+/, '');
if (chank !== '') {
console.log(JSON.parse(chank));
}
});
Данные, которые получает программа:
{
sid: 'eP3rCib1OovI7WZdATdk',
upgrades: [],
pingInterval: 25000,
pingTimeout: 60000
}
[ 'init', {} ]
[
'past queue',
[
{
roundId: 'b355e745-bca6-4dd9-b626-0ce93af0e9a1',
nonce: 4394614,
startDate: '2021-05-29T17:49:12.207Z',
random: 15,
choice: 1
},
...
[ 'number players', 2832 ]
[
'classic-round-start',
{
round: {
roundId: '7b12f4e4-de6e-4f22-9943-b075cfa1f258',
nonce: 651258,
startDate: '2021-05-29T20:03:33.275Z',
time: 24999,
reservations: [],
myReservations: []
},
winner: {
roundId: '6d9292c5-4900-4c9b-9850-b416fd92fb8d',
nonce: 651257,
startDate: '2021-05-29T20:03:01.241Z',
random: 8,
choice: 1
}
}
]
