如何检测 zstd 压缩?
How to detect zstd compression?
我目前正在开发一个 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
我目前想知道是否有更干净的方法来执行此操作甚至检测 zstd。
你做的很好。
我想您可以检查流是否以四个字节 28 b5 2f fd
开头。如果没有,则它不是 zstd 流。如果是,它可能是一个 zstd 流。在后一种情况下,您将尝试解压缩,如果失败,您将退回到仅复制输入。
事实证明这与您已经在做的完全一样,因为 zstd.decompress
做的第一件事就是寻找那个签名。
我目前正在开发一个 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
我目前想知道是否有更干净的方法来执行此操作甚至检测 zstd。
你做的很好。
我想您可以检查流是否以四个字节 28 b5 2f fd
开头。如果没有,则它不是 zstd 流。如果是,它可能是一个 zstd 流。在后一种情况下,您将尝试解压缩,如果失败,您将退回到仅复制输入。
事实证明这与您已经在做的完全一样,因为 zstd.decompress
做的第一件事就是寻找那个签名。