boost:使用gzip解压缩http响应失败

时间:2012-05-12 11:57:16

标签: c++ boost gzip gzipstream

我正在尝试使用boost gzip过滤器解压缩http正文响应。我正在使用随处提供的标准代码示例:

std::string source = "c:\\install\\data.gz";
std::string destination = "c:\\install\\data.txt";

using namespace std;
using namespace boost::iostreams;

ifstream file(source, ios_base::in | ios_base::binary);
filtering_streambuf<input> in;
in.push(gzip_decompressor());
in.push(file);
ofstream unzipped(destination, std::ios::out | std::ios::binary);
boost::iostreams::copy(in, unzipped);

在这种情况下,我之前将页面内容保存到源文件中。问题是这个代码不适用于一些使用gzip-encoding的网站(例如,http://mail.ru - 最大的俄罗斯门户网站)。其他网站,例如http://bing.com完全未压缩。

我编写了一些小代码来使用GZipStream测试保存的数据。即使使用mail.ru也可以正常工作:

String source = @"c:\install\data.gz";
String destination = @"c:\install\data.txt";

using (FileStream inFile = new FileStream(source, FileMode.Open))
{
    using (FileStream outFile = File.Create(destination))
    {
        using (GZipStream Decompress = new GZipStream(inFile, CompressionMode.Decompress))
        {
            Decompress.CopyTo(outFile);
        }
    }
}

有人可以解释我的错误,mail.ru或gzip吗?

0 个答案:

没有答案