我正在编写一个 Python 2.7 程序,它通过套接字连接发送和接收数据包,与基于 TCP/IP 的第 3 方 API 进行交互。
数据包由以下部分组成:
- 在数据前面插入一个 10 字节长的标头;
- 身体;
- 尾部必须附加到数据的末尾。
标头包括有关数据长度和数据类型的信息。整个数据包包括一个报头、实际数据和一个报尾。
压缩方法是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
我不知道如何解决这个问题。我试图用谷歌搜索它,但似乎关于 Python/MiniLZO 的信息很少。我不确定我是否lzo
以错误的方式使用了包,或者数据一开始就被不正确地压缩了。