我正在编写一个Python 2.7程序,该程序通过套接字连接发送和接收数据包,从而与基于第三方TCP/IP的API进行交互。
数据包包括以下部分:
标题包括有关数据长度和数据类型的信息。整个数据包包括标题,实际数据和尾部。
压缩方法是MiniLZO。
我的问题是如何处理数据,尤其是数据包的主体,该主体是用MiniLZO压缩的。
例如,当我发送这样的请求时:
bytearray(b'\x01W\x00\x00\x000W\x00\x00\x00')
<TASK><MESSAGE Type="LogonReq" Session="" Reference="TP1" Product="2">
</MESSAGE></TASK>
bytearray(b'\x02')
服务器回复:
HEADER: 10 Bytes
'\x01\xb1\x00\x00\x001\xae\x00\x00\x00'
BODY:177 Bytes
'\x002<TASKREPLY><MESSAGE Type="LogonReqReply" Session="DUH3PRdH"
ReferencP\x05\x00\x18TP1" Product="2">\r\n<ANSWER Result="1"
Time@\x01\x00\x1225146" Date="20171028" Mode="P" /></\xcc\x11\x0c>
</TASKREPLY>\r\n\x11\x00\x00'
TRAILER:1 Bytes
'\x02'
我安装了
python-lzo
1.11软件包,并尝试通过以下方法解压缩主体:>>> import lzo
>>> lzo.decompress(body)
但它返回此错误:
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
lzo.decompress(body)
error: Header error - invalid compressed data
我不知道如何解决这个问题。我试图用Google搜索它,但是似乎关于Python/MiniLZO的信息很少。我不确定是否以错误的方式使用了
lzo
包,或者数据最初是否被不正确地压缩。
最佳答案
通过反复试验,我发现我需要将压缩字符串的长度传递给decompress函数,以使其正常工作。它是这样的:
lzo.decompress(body,False,176)
关于python - 使用Python 2.7/python-lzo 1.11解压缩MiniLZO字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46986496/