如何检测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

我现在想知道,如果有一个更干净的方法来做到这一点,甚至检测zstd。

你做的很好。

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

结果与你已经在做的完全相同,因为zstd.decompress正在做的第一件事就是寻找该签名。

执行python子句'b = zstd.compress(str)'后,字节数组总是以'b'(xb5/xfd x03x19x00'开始。所以你可以使用'index()'函数来判断。

------------------
有人知道如何解压缩的内容,这是http响应输出类型' application/zstd'使用互联网浏览器时?像下图:

ache-control: no-store
cf-cache-status: DYNAMIC
cf-ray:7a51c7dbad5efb2c-SJC
content-type: application/zstd
日期:2023年3月9日星期四07:59:49 GMT
nel:{"success_fraction" 0,"report_to":"cf-nel","max_age": 604800}报告:{"endpoints"[{"url"https://a.nel.cloudflare.com/report/v3?s=K3U4RKcx6XOP1ekNoJGTilOIZ%2FR4f43q%2BBsvbmmbEkQFHWMJQ5JvhDFDbZFHqVczdsR0rzY24pO9h4kjeehrn3fs0H76%2FO2F612s%2F7%2FjQ%2F6LRjYIb%2BOsPsFOEzIzJTU0NwSyUEmTPW0%3D"}],"group":"cf-nel","max_age": 604800}
服务器:cloudflare

相关内容

  • 没有找到相关文章

最新更新