我在解决通过websockets从Chrome(JavaScript)发送到python服务器(使用低级套接字apis)的数据时遇到了一些问题。我已经正确处理了握手,当我使用readyState
时,websocket的.send(...)
是开放的。我接收字节数据(根据规格),但无论我如何尝试解码它,它都会出现乱码或触发异常。
的javascript
var we = new WebSocket(url);
we.send("string data");
蟒
data = socket.recv(1024) # socket from sock.accept(...)
#handle data
我已经尝试了data.decode('utf-8')
,因为这似乎是明显的解决方案(抛出错误)。我已经尝试剥离\x80
和\x81
(我认为 - 我在StackOverflow上的某处读过它),但它仍然会抛出错误......
我尝试过base64解码 - 我在SO的答案中找到了(但这没有意义......)
我缺少什么?
答案 0 :(得分:2)
我不熟悉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
请注意,这只是解码特定示例数据的示例,并未考虑完整规范。例如,数据长度可以是多个字节(因此掩码和数据块的位置可能不同)。