如何检测zstd压缩?

myn*_*god 4 python compression json python-requests zstd

我目前正在开发一个 python 应用程序,它可以与 facebook api 一起使用。众所周知,facebook热爱自己的技术,正在与zstd合作进行数据压缩。

问题:facebook 要么返回带有正常 json 的未压缩响应,要么如果响应较长,则返回 zstd 压缩 json。

我当前的代码是这样的:

import zstd
import json


def handle_response(response)
    json = None
    try:
        json = json.loads(zstd.decompress(response.content))
    except:
        json = json.loads(response.text)

    return json
Run Code Online (Sandbox Code Playgroud)

我目前想知道是否有更干净的方法来执行此操作甚至检测 zstd。

Mar*_*ler 8

你正在做的事情很好。

我想,您可以检查流是否以四个字节开头28 b5 2f fd。如果没有,则它不是 zstd 流。如果是,则它可能是 zstd 流。在后一种情况下,您将尝试解压缩,如果失败,您将退回到仅复制输入。

事实证明,这与您已经在做的事情完全相同,因为zstd.decompress要做的第一件事就是寻找该签名。