【问题标题】:finding whether the body contains gzipped data查找正文是否包含压缩数据
【发布时间】:2011-04-12 07:17:54
【问题描述】:

我有一个程序,它从 curl 请求中搜索特定字符串的回复。我有时会得到压缩数据。有没有办法找到回复是文本还是压缩格式? 标头有时包含 gziipped,deflate 标头,但不一致。有没有办法搜索字符串并找到它是否被压缩?

【问题讨论】:

    标签: c++ curl gzip


    【解决方案1】:

    您可以尝试查看数据的前两个字节。对于压缩后的数据,they should be 0x1f, 0x8b

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

    【讨论】:

    • 回复保存在字符串中。那么如何从那里着手呢?
    • if (string[0] == 0x1f && string[1] == 0x8b) { blah blah blah;}
    • 很抱歉回复晚了,但是当我尝试这样做时,它不匹配。当我打印字符串时,它包含所有难以辨认的语言或符号,但前两个字母 C 和 W.. 那么我该如何从这里开始呢?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          符合标准的 HTTP 响应将包含 Content-Encoding: 或 Transfer-Encoding: 标头,为压缩响应指定“gzip”,无需通过查看幻数进行猜测。不幸的是,很多网站都把这些标题弄错了。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-04
            • 2016-03-15
            • 2022-01-11
            • 2016-10-23
            • 2020-12-04
            • 1970-01-01
            相关资源
            最近更新 更多