【问题标题】:How to detect zstd compression?如何检测 zstd 压缩?
【发布时间】:2021-10-08 18:34:20
【问题描述】:

我目前正在开发一个可与 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。

【问题讨论】:

标签: python json python-requests compression zstd


【解决方案1】:

你做的很好。

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

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

【讨论】:

  • 所以基本上:request.content.startswith(b"\x28\xb5\x2f\xfd") 谢谢! :)
  • 或者只是按照你在问题中提出的要求。
猜你喜欢
  • 2020-01-04
  • 2021-07-04
  • 1970-01-01
  • 2021-10-02
  • 2023-02-05
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
  • 1970-01-01
相关资源
最近更新 更多