从Python中读取WebSocket(来自Javascript WebSocket的数据)

时间:2015-05-21 04:50:39

标签: javascript python python-2.7 websocket

我在解决通过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的答案中找到了(但这没有意义......)

我缺少什么?

1 个答案:

答案 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

请注意,这只是解码特定示例数据的示例,并未考虑完整规范。例如,数据长度可以是多个字节(因此掩码和数据块的位置可能不同)。