【问题标题】:why http gzip content decompress with zlib failed? (C++)为什么使用 zlib 解压缩 http gzip 内容失败? (C++)
【发布时间】:2013-08-06 08:28:55
【问题描述】:

数据来自here,我用tcp socket来获取。

回复如下:

HTTP/1.1 200 OK
Server: nginx/0.7.67
Date: Tue, 06 Aug 2013 08:25:48 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
P3P: CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
Content-Encoding: gzip

2e2
?

然后我使用 zlib 函数“解压缩”解压缩,但得到了 Z_DATA_ERROR 返回的代码。看起来数据开始位置“2e2”不是经过验证的 gzip 流数据?

【问题讨论】:

    标签: http zlib


    【解决方案1】:

    传输编码是分块的。每个数据块前面都有以十六进制指定的块大小,后跟一个行终止符。然后,应该为内容读入那么多字节。块数据后跟另一个行终止符。在发送大小为 0 的块之前,下一个块具有相同的格式(大小后跟数据)。

    您需要解码每个块并将其附加到解压缩缓冲区。将块大小留在数据流中不会被 zlib 视为有效输入。

    【讨论】:

      猜你喜欢
      • 2010-12-22
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多