Может подключаться к интерфейсу веб-сокета шлюза API AWS с помощью wscat, но не из приложения libsoup C++

tl;dr Я получаю только 403 запрещенных ответа от веб-сокета шлюза AWS API с использованием программы на основе libsoup, но я могу легко добраться до шлюза с помощью wscat. Программа на C++ работает на echo.websocket.org, так что я знаю, что в основном это звук. В моем API не настроена аутентификация, так что это не должно быть моей проблемой.

У меня настроен интерфейс веб-сокета шлюза API AWS, и я могу подключиться к нему с помощью wscat, утилиты командной строки JS, которую Amazon предлагает для тестирования веб-сокетов шлюза API. Я также могу подключиться к нему с помощью инструмента тестирования на этом сайте: https://www.websocket.org/echo.html.

Чтобы использовать свой API по-настоящему, мне нужно связаться с ним из программы на C++. Я загрузил этот простой пример клиента websocket на практике (https://github.com/david7482/libsoup_websocket_client, спасибо David7482), но я ничего не добился от него. Клиент может нормально подключиться к wss://echo.websocket.org, но AWS отказывается обновлять исходное HTTPS-соединение до веб-сокета и отправляет обратно сообщение "403 запрещено".

Я взломал libsoup_websocket_client, чтобы эмулировать все заголовки, которые отправляет echo.websocket.org, но это не помогло. Похоже, что wscat отправляет заголовок "host", и, играя с параметром --host, я показал, что шлюз чувствителен к значению "host". Я могу генерировать различные ошибки, искажая хост, но когда я отправляю ту же строку хоста из libsoup_websocket_client, которую отправляют https://www.websocket.org/echo.html и wscat, я все равно получаю тот же отрицательный результат.

Неудачный ответ имеет заголовок "keep-alive", но не заголовок "upgrade", поэтому я чувствую, что это дает сбой на действительно базовом уровне согласования WebSocket, но я не знаю почему. Я покопался в коде wscat и WebSocket.js и не нашел волшебной разницы.

Я также создал простой клиент веб-сокетов с помощью cpprestsdk и столкнулся с той же проблемой.

0 ответов

Другие вопросы по тегам