jpeg_man
@jpeg_man
front-end dev

Как установить соединение с помощью socket.io-client с API другого сайта?

Доброго времени суток. Решаю задачу по парсингу данных из api стороннего сайта.
Среда Nodejs. Нужно сделать через socket.io-client, ранее с websockets не работал, поэтому сейчас застрял на одной проблеме и не могу продвинуться дальше. Прочитал кучу материалов, но вопросов возникает все больше.
Есть сайт на котором в html контейнере обновляется инфа похожая на чат, но не чат, в devtools через вкладку Network (WS) вижу адрес web-socket'а, а также вижу актуальные обновляемые данные. Мне нужно эти данные выводить себе в консоль.
Пытаюсь установить соединение как показано в документации socket.io-client:

const io = require('socket.io-client');
const socket = io('wss://cf2-bot.site.org/socket.io/?EIO=3&transport=websocket&sid=825f4177-8e0d-4f29-b3b1-ce66a2adbea5');

socket.on('connect', () => {console.log(socket.id)});


Но как я понимаю соединение не устанавливается, или я вообще делаю что-то не так? Для начала я хотел бы просто посмотреть, могу ли соединиться с этим ботом(api), а далее отправлять запросы и получать данные. С Nodejs знаком не так давно, буду рад любой помощи. Может ли быть что соединение не устанавливается из-за CloudFlare? И еще вопрос, в моей IDE WebStorm 2019 показывает что метод .on - "Unresolved function or method on()", почему так?
  • Вопрос задан
  • 601 просмотр
Решения вопроса 1
jpeg_man
@jpeg_man Автор вопроса
front-end dev
Решено. В socket.io-client нужно указывать основной сервер веб-сокета, и через options передавать параметры.
Важно указывать транспорт (по умолчанию long-polling).
Моя ошибка была в том, что я передавал запрос напрямую в uri.
const url = 'wss://sf2-site.ru';
    const socket = io(url, {
        query: {
            path: '/socket.io',
            transports: ['websocket'],
            origins: 'https://www.site.org'
        }
    });


    socket.on("connect", (data) => {
        console.log('connected');
    });
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@maned7
В документации к функции send https://github.com/websockets/ws/blob/HEAD/doc/ws....
есть описание всех параметров - name, options, callback
callback - функция, в параметрах которой как раз прилетает ответ.
ws.send('NAME_GET', null, function (result) {
    console.log(result);
});

Не факт что сработает, возможно эта функция просто вызывается когда запрос завершён.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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