查找主体是否包含压缩数据

finding whether the body contains gzipped data

本文关键字:压缩 数据 包含 是否 主体 查找      更新时间:2023-10-16

我有一个程序,其中它从curl请求中搜索特定字符串的回复。我有时会收到压缩过的数据。是否有办法找到是否回复是文本或压缩格式?Header有时包含gziippped,deflate Header,但不一致。是否有一种方法来搜索字符串并发现它是否被压缩了?

您可以尝试查看数据的前两个字节。对于gzip数据,它们应该是0x1f, 0x8b。

Member header and trailer
ID1 (IDentification 1)
ID2 (IDentification 2)
These have the fixed values ID1 = 31 (0x1f, 37), ID2 = 139 (0x8b, 213),
to identify the file as being in gzip format.

您可以查看文件的第一个字节。也许它们包含一个神奇的数字

gzip文件格式以一些"magic bytes"开头。您可以检查正文是否以这些开头,如果是,则将这些字节推回流并开始解压缩。

您可以将它通过zcat管道传输,如果失败,则按原样使用字符串。我知道马虎,但它应该是可靠的;纯文本文件永远不会包含有效的gzip数据。

符合标准的HTTP响应将包含一个Content-Encoding:或Transfer-Encoding:报头,指定压缩响应的"gzip",从而消除了通过查看魔术数字来猜测的需要。然而,不幸的是,许多网站都把这些标题搞错了。