意外的响应代码:426,带有PhanthomJS Websocket客户端/ROSLIB

Unexpected response code: 426 with PhanthomJS Websocket client/ROSLIB

本文关键字:Websocket PhanthomJS 客户端 ROSLIB 带有 响应 代码 意外      更新时间:2023-09-26

我正试图使用PhanthomJS(1.9.7)来设置批量测试脚本,以通过我们的Websocket服务器(在Tornado之上实现的RosBridge)驱动我们的机器人软件。

我们使用ROSLIBJS,这是一个使用标准HTML5 WebSocket API与服务器交互的JS库。我更喜欢使用NodeJS而不是PhantomJS,但ROSLIBJS中存在依赖项,需要提供浏览器DOM结构。有人为NodeJS移植了ROSLIBJS。我让它运行,但有一些关键的错误使它无法使用。因此,我需要PhantomJS。

根据此链接,存在与Websocket协议不兼容的问题。意外响应代码426

这是一个已知的问题吗。如果是这样的话,PhantomJS什么时候才能修复?我可以自己轻松地修补PhantomJS吗?

Http 426可能意味着您正在尝试连接不受支持的websocket协议版本。检查响应是否具有http标头"sec-websocket-version"以及支持的版本列表。

您的客户端正在使用哪个版本?

此外,如果您通过代理进行连接,代理可能会从请求中删除"升级"标头,因为它被标记为"连接"标头。切换到WSS://以防止这种情况发生。

有趣的是,我正在考虑为roslibjs编写集成测试,并遇到了这个问题。我会试试phantomjs-2.0(https://github.com/Vitallium/phantomjs-qt5)和真正的铬通过铬驱动器。我最喜欢公关对roslibjs的结果。

另一种选择是编写另一个使用socket.io进行客户端通信的网桥,以实现最大的可移植性。

参见本PR:https://github.com/RobotWebTools/roslibjs/pull/83。它使用chrome来运行测试。或者,您可以通过更改允许rosbridge接受draft76 websockethttps://github.com/RobotWebTools/rosbridge_suite/blob/develop/rosbridge_server/src/tornado/websocket.py#L186返回True;