Я рассмотрел множество вопросов и ответов по этой теме и дошел до того, что я использую следующий код для получения байтов из заданного URI:
var request = (HttpWebRequest)WebRequest.Create(uri);
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
var response = request.GetResponse();
var stream = response.GetResponseStream();
if (stream != null)
{
var buffer = new byte[4097];
var memoryStream = new MemoryStream();
do
{
var count = stream.Read(buffer, 0, buffer.Length);
memoryStream.Write(buffer, 0, count);
if (count == 0)
break;
} while (true);
return memoryStream.ToArray();
}
response.Close();
return null;
Теперь для определенного URI (который указывает на файл) при отладке я вижу, что заголовок «Content-Encoding» веб-ответа равен нулю («»), но при попытке чтения из поток, он выдает исключение:
System.IO.InvalidDataException: магическое число в заголовке GZip неверно. Убедитесь, что вы передаете поток GZip.
При отладке того же URI в инструментах разработчика я получаю это в заголовках ответа:
Content-Encoding: GZIP, выкачать
Так что я действительно не знаю, что происходит.
Какие-нибудь подсказки и идеи о том, как избежать этого исключения и успешно прочитать байты файла?
Спасибо!