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

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

У меня настроен AWS интерфейс веб-сокета шлюза API, и я могу подключиться к нему с помощью 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 send, я все равно получаю тот же отрицательный результат.

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

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

...