解码通过WebSocket发送的数据

3 投票
2 回答
3235 浏览
提问于 2025-04-17 07:36

我正在尝试搭建一个简单的Python Websocket服务器。我已经成功完成了握手等步骤。但是,我不知道怎么解码从浏览器收到的消息,这里是服务器接收到的原始输出:'xÙõKþ°pãüCY。我该怎么解码这个呢?

2 个回答

0

你从客户端发送的消息是什么?你确定你在用Chrome 8吗?那可是过时了7个版本。如果你实际上在用较新的Chrome,那么你可能遇到的问题是没有正确解码数据。最新版本的协议(HyBi系列)中,客户端到服务器的数据使用了4字节的运行XOR掩码,这样可以防止一些坏的中间人被恶意的JavaScript攻击。

你可以查看规范的第5.3节,里面有关于客户端到服务器数据掩码的描述。

另外,要注意的是,数据是用UTF-8编码的(在旧协议中也是如此),你不能简单地把它当作ASCII字符串来处理。

3

WebSocket协议涉及到一种叫做封装协议的东西。也就是说,浏览器并不是直接把数据发送给服务器(服务器也不是直接把数据发给浏览器)。你需要解析这个封装协议,才能提取出原始的数据。

为了帮助你完成这个解析,已经有很多库被开发出来了。你可以试试使用这些库。其中一个库是http://pypi.python.org/pypi/txWS/0.6.1,如果这个不合适,你可以稍微搜索一下,找到其他的库。

撰写回答