2

我目前正在开发一个与 facebook api 一起使用的 python 应用程序。众所周知,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

我目前想知道,是否有更干净的方法可以做到这一点,甚至检测 zstd。

4

1 回答 1

3

你在做什么很好。

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

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

于 2021-08-03T15:25:49.073 回答