我目前正在研究一个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