python 中的屏蔽和取消屏蔽 websocket 数据

Mask & Unmask websocket data in python

我正在尝试创建一个可以连接到 websocket 服务器的 python websocket class,我需要帮助编写一个可以屏蔽和取消屏蔽数据的函数。我在 PHP 中有一个类似的 websocket class,看起来像这样:

function unmask($text) {
$length = ord($text[1]) & 127;
if($length == 126) {
    $masks = substr($text, 4, 4);
    $data = substr($text, 8);
}
elseif($length == 127) {
    $masks = substr($text, 10, 4);
    $data = substr($text, 14);
}
else {
    $masks = substr($text, 2, 4);
    $data = substr($text, 6);
}
$text = "";
for ($i = 0; $i < strlen($data); ++$i) {
    $text .= $data[$i] ^ $masks[$i%4];
}
return $text;

}

function mask($text){
$b1 = 0x80 | (0x1 & 0x0f);
$length = strlen($text);

if($length <= 125)
    $header = pack('CC', $b1, $length);
elseif($length > 125 && $length < 65536)
    $header = pack('CCn', $b1, 126, $length);
elseif($length >= 65536)
    $header = pack('CCNN', $b1, 127, $length);
return $header.$text;
}

所以我尝试在 Python 中创建相同的东西:

def mask(text):
    b1 = 0x80 | (0x1 & 0x0f)
    length = len(text)

    if length <= 125:
        header = struct.pack('CC', b1, length)
    if length > 125 & length < 65536:
        header = struct.pack('CCn', b1, 126, length)
    if length <= 65536:
        header = struct.pack('CCNN', b1, 127, length)
    return header + text

它 returns 一个错误:

Bad char in struct format

如果有人能帮我写出函数就好了。谢谢!

我找到了一个非常有用的脚本,它完全符合我的需要。

http://sidekick.windforwings.com/2013/03/minimal-websocket-broadcast-server-in.html