Неожиданный код ответа: 426 с клиентом PhanthomJS Websocket /ROSLIB
Я пытаюсь использовать PhanthomJS (1.9.7) для настройки скрипта пакетного тестирования для управления нашим робототехническим программным обеспечением через наш сервер Websocket (RosBridge, который реализован поверх Tornado).
Мы используем ROSLIBJS, которая является библиотекой JS, которая использует стандартный API-интерфейс HTML5 WebSocket для взаимодействия с сервером. Я бы предпочел использовать NodeJS вместо PhantomJS, но в ROSLIBJS есть зависимости, которые требуют наличия структур DOM браузера. Кто-то портировал ROSLIBJS на NodeJS. Я запустил его, но были критические ошибки, которые мешали его использовать. Следовательно, мне нужен PhantomJS.
По этой ссылке существует некоторая несовместимость с протоколом Websocket. Неожиданный код ответа 426
Это известная проблема. Если так, то когда будет исправлено PhantomJS, чтобы это работало? Могу ли я легко исправить PhantomJS?
2 ответа
Http 426 может означать, что вы пытаетесь подключиться с неподдерживаемой версией протокола websocket. Проверьте, имеет ли ответ заголовок http "sec-websocket-version" со списком поддерживаемых версий.
Какую версию использует ваш клиент?
Кроме того, если вы подключаетесь через прокси-сервер, он может удалить заголовок "upgrade" из запроса, поскольку он помечен как заголовок "connection". Переключитесь на WSS://, чтобы предотвратить это.
Как ни странно, я пытался написать интеграционные тесты для roslibjs и наткнулся на этот вопрос. Я попробую phantomjs-2.0 ( https://github.com/Vitallium/phantomjs-qt5) и настоящий хром с помощью chromedriver. Мне больше всего понравятся пиар результаты против roslibjs.
Альтернативным вариантом было бы написать другой мост, который использует socket.io для взаимодействия с клиентом для достижения максимальной переносимости.
Смотрите этот PR: https://github.com/RobotWebTools/roslibjs/pull/83. Он использует хром для запуска тестов. В качестве альтернативы вы можете разрешить rosbridge принимать draft76 websockets, изменив https://github.com/RobotWebTools/rosbridge_suite/blob/develop/rosbridge_server/src/tornado/websocket.py для возврата True;