python - 使用Python 2.7/python-lzo 1.11解压缩MiniLZO字符串

标签 python sockets compression lzo

我正在编写一个Python 2.7程序,该程序通过套接字连接发送和接收数据包,从而与基于第三方TCP/IP的API进行交互。

数据包包括以下部分:

  • 在数据前面插入一个10字节长的 header 。
  • body ;
  • 必须在数据末尾附加预告片。

  • 标题包括有关数据长度和数据类型的信息。整个数据包包括标题,实际数据和尾部。

    压缩方法是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/

    相关文章:

    python - PyQt:如何从选择查询中获取行值

    python - pip install 和 sudo pip install 有什么区别?

    php - 套接字在PHP中这么慢吗?

    java - 如何防止HPACK解压失败?

    python - 是否有任何 Python2 的实现可以传递排序?

    python - 如何有效地使用 Python 属性?

    python socket.recv/sendall 调用阻塞

    c++ - C/C++ 事件驱动监控非子程序的终止

    delphi - 如何使用 Delphi 将多个文件压缩到一个存档中

    algorithm - 规范的霍夫曼编码比特流的内容是什么?