python3 zlib.error: Error -3 while decompressing data: invalid distance too far back


客戶端上報的數據中有gzip壓縮加urlencode加base64encode

服務端python逆向解析的時候偶發出現python3 zlib.error: Error -3 while decompressing data: invalid distance too far back,

出現這個問題一般都是數據轉化過程中出現問題

    s2 = parse.unquote(s1.decode('utf-8'))
    s3 = s2.encode('ISO-8859-1')
    return gzip.decompress(s3)

  對應python中的代碼是這樣的,通過答應java和python的s3數據的時候發現兩邊的數據中有幾行不相同, java這邊打印的ord 是43, python這邊是32, 43和32分別對應的字符是‘+’和‘ ’

我在unquote完之后替換掉+為‘ ’ , 發現還是偶發同樣的錯誤, 只不過概率變低了, 所以知道自己的方向是對的, 只不過還有些地方有問題, 接着看python的源碼, 發現相同包下還有一個

def unquote_plus(string, encoding='utf-8', errors='replace'):
    """Like unquote(), but also replace plus signs by spaces, as required for
    unquoting HTML form values.

    unquote_plus('%7e/abc+def') -> '~/abc def'
    """
    string = string.replace('+', ' ')
    return unquote(string, encoding, errors)

  頓時感覺這就是能解決問題的方法, 用個方法驗證后果然解決了問題

發現是自己替換字符串的順序不對, 應該在decode之前去替換, 很尷尬, 記錄下這個方法, 下次發現如果有urlencode 和其他語言不一致的情況下優先替換成plus方法試一下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM