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
我正在尝试创建一个可以连接到 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