为什么使用zlib进行http gzip内容解压缩失败?(C++)



数据来自这里,我用tcp套接字来获取它。

响应类似:

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函数"uncompress"进行解压缩,但得到了Z_DATA_ERROR返回的代码。看起来数据起始位置"2e2"不是有效的gzip流数据?

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

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

最新更新