2013-08-06 102 views
1

数据来自here,我用tcp socket来获取它。为什么用zlib解压缩http gzip内容失败? (C++)

的响应,如:

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流数据?

回答

1

传输编码被分块。每个数据块都以十六进制指定的块大小开头,后跟一个行结束符。然后,应该为内容读入许多字节。块数据之后是另一个行结束符。下一个块具有相同的格式(大小跟着数据),直到发送一个0大小的块。

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