从 Python 中的 WebSocket 读取(来自 Javascript WebSocket 的数据)
Reading From a WebSocket in Python (Data from Javascript WebSocket)
我在解码通过网络套接字从 Chrome (JavaScript) 发送到 python 服务器(使用低级套接字 API)的数据时遇到了一些问题。我已经正确处理了握手,当我使用 .send(...)
时,websocket 的 readyState
是打开的。我收到字节数据(根据规范),但无论我如何尝试对其进行解码,它都会以乱码或触发异常的形式出现。
javascript
var we = new WebSocket(url);
we.send("string data");
python
data = socket.recv(1024) # socket from sock.accept(...)
#handle data
我试过 data.decode('utf-8')
因为这似乎是显而易见的解决方案(抛出错误)。我已经尝试剥离 \x80
和 \x81
(我想 - 我在 Whosebug 的某个地方读到了它),但它仍然会引发错误...
我已经尝试过 base64 解码 - 我在 SO 上的一个答案中找到了它(但这没有意义所以...)
有什么我想念的吗?
我不精通WebSocket通信,但据此answer,数据被编码(见接收消息部分)
>>> pkt = [int(x, 16) for x in '81:85:86:56:99:b4:ee:33:f5:d8:e9'.split(':')]
>>> pkt[0] # header should be 129 for text mode
129
>>> len = pkt[1] & 0b01111111
>>> len
5
>>> mask = pkt[2:6]
>>> data = pkt[6:]
>>> for i,c in enumerate(data):
... print chr(c ^ mask[i % 4])
...
h
e
l
l
o
请注意,这只是解码您的特定示例数据的示例,并未考虑完整规范。例如,数据长度可以是多个字节(因此掩码和数据块的位置可能会有所不同)。
我在解码通过网络套接字从 Chrome (JavaScript) 发送到 python 服务器(使用低级套接字 API)的数据时遇到了一些问题。我已经正确处理了握手,当我使用 .send(...)
时,websocket 的 readyState
是打开的。我收到字节数据(根据规范),但无论我如何尝试对其进行解码,它都会以乱码或触发异常的形式出现。
javascript
var we = new WebSocket(url);
we.send("string data");
python
data = socket.recv(1024) # socket from sock.accept(...)
#handle data
我试过 data.decode('utf-8')
因为这似乎是显而易见的解决方案(抛出错误)。我已经尝试剥离 \x80
和 \x81
(我想 - 我在 Whosebug 的某个地方读到了它),但它仍然会引发错误...
我已经尝试过 base64 解码 - 我在 SO 上的一个答案中找到了它(但这没有意义所以...)
有什么我想念的吗?
我不精通WebSocket通信,但据此answer,数据被编码(见接收消息部分)
>>> pkt = [int(x, 16) for x in '81:85:86:56:99:b4:ee:33:f5:d8:e9'.split(':')]
>>> pkt[0] # header should be 129 for text mode
129
>>> len = pkt[1] & 0b01111111
>>> len
5
>>> mask = pkt[2:6]
>>> data = pkt[6:]
>>> for i,c in enumerate(data):
... print chr(c ^ mask[i % 4])
...
h
e
l
l
o
请注意,这只是解码您的特定示例数据的示例,并未考虑完整规范。例如,数据长度可以是多个字节(因此掩码和数据块的位置可能会有所不同)。