我使用这个函数来解码通过html5 websockets发送的包但是当有效载荷超过125字节时,它就会崩溃。有可能把它做大一点吗?
def decode_data(data):
databyte = bytearray(data)
datalen = (0x7F & databyte[1])
str_data = ''
if(datalen > 0):
mask_key = databyte[2:6]
masked_data = databyte[6:(6+datalen)]
unmasked_data = [masked_data[i] ^ mask_key[i%4] for i in range(len(masked_data))]
str_data = str(bytearray(unmasked_data))
return str_data
这不是加长的问题。根据RFC 6455:
- 0 ~ 125为有效载荷长度。
- 如果为126,则后面的2个字节被解释为16位无符号整数,即为有效载荷长度。
- 如果是127,下面的8个字节被解释为64位无符号整数(最高位必须为0)是有效载荷长度。
长度必须被切片成单独的字节,这意味着您需要向右进行位移(有8位的量),然后通过和1111 1111
(即255
)只保留最后8位。
这个答案非常详细地讨论了这个原则