boost: распаковка http ответа с помощью gzip завершилась неудачно

Я пытаюсь распаковать http ответа тела с помощью фильтров GZIP. Я использую стандартный пример кода, предоставленный везде:

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-кодирование (например, 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 ответов

Другие вопросы по тегам