c++ - zlib 解压gzip/deflate 报错问题?

【字号: 日期:2023-04-18浏览:27作者:雯心

问题描述

加入http头:wstring szHeader = L'Accept-Encoding: gzip,deflate';

用网上提供的这段代码可以成功解压http gzip压缩的网页 ,比如http://www.sohu.com/可以成功解压

但是压解deflate压缩的网页不行(比如这个网站:http://122.114.115.247:8080/?...,报错Z_DATA_ERROR

代码如下:

/* HTTP gzip decompress *//* 参数1.压缩数据 2.数据长度 3.解压数据 4.解压后长度 */int HttpRequests::httpgzdecompress(Byte* zdata, uLong nzdata, Byte* data, uLong* ndata){ int err = 0; z_stream d_stream = {0 }; /* decompression stream */ static char dummy_head[2] = {0x8 + 0x7 * 0x10,(((0x8 + 0x7 * 0x10) * 0x100 + 30) / 31 * 31) & 0xFF, }; d_stream.zalloc = (alloc_func) 0; d_stream.zfree = (free_func) 0; d_stream.opaque = (voidpf) 0; d_stream.next_in = zdata; d_stream.avail_in = 0; d_stream.next_out = data; if (inflateInit2(&d_stream, 47) != Z_OK)return(-1); while (d_stream.total_out < *ndata && d_stream.total_in < nzdata) {d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */if ((err = inflate(&d_stream, Z_NO_FLUSH)) == Z_STREAM_END) break;if (err != Z_OK) { if (err == Z_DATA_ERROR) {d_stream.next_in = (Bytef *) dummy_head;d_stream.avail_in = sizeof(dummy_head);if ((err = inflate(&d_stream, Z_NO_FLUSH)) != Z_OK) { return(-1);} } elsereturn(-1);} } if (inflateEnd(&d_stream) != Z_OK)return(-1); *ndata = d_stream.total_out; return(0);}

解压deflate压缩网页不行,gzip可以,

问题解答

回答1:

解压是不是应该用deflateInit,你的代码怎么是inflateInit2

相关文章: