HttpWebResponse .NET распаковывает автоматически GZiped и Deflated ответы?

Я пытаюсь сделать запрос, который принимает сжатый ответ

var request = (HttpWebRequest)HttpWebRequest.Create(requestUri); request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate"); 

Интересно, когда я добавлю вторую строку, мне придется обрабатывать декомпрессию вручную.

Я нашел ответ.

Вы можете изменить код на:

 var request = (HttpWebRequest)HttpWebRequest.Create(requestUri); request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 

И у вас будет автоматическая декомпрессия. Не нужно менять остальную часть кода.

Для .NET Core вещи немного больше связаны. Требуется GZipStream как нет свойства (с момента написания) для AutomaticCompression Рассмотрим следующий пример GET :

 var req = WebRequest.CreateHttp(uri); /* * Headers */ req.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate"; /* * Execute */ try { using (var resp = await req.GetResponseAsync()) { using (var str = resp.GetResponseStream()) using (var gsr = new GZipStream(str, CompressionMode.Decompress)) using (var sr = new StreamReader(gsr)) { string s = await sr.ReadToEndAsync(); } } } catch (WebException ex) { using (HttpWebResponse response = (HttpWebResponse)ex.Response) { using (StreamReader sr = new StreamReader(response.GetResponseStream())) { string respStr = sr.ReadToEnd(); int statusCode = (int)response.StatusCode; string errorMsh = $"Request ({url}) failed ({statusCode}) on, with error: {respStr}"; } } } 

Ответы GZIP и Deflate не обрабатываются автоматически. См. Эту статью для получения дополнительной информации: HttpWebRequest и GZip Http-ответы

Я думаю, вам нужно самому распаковать stream. Вот статья о том, как это сделать:

http://www.west-wind.com/WebLog/posts/102969.aspx

  • Получение кода состояния Http (200, 301, 404 и т. Д.) Из HttpWebRequest и HttpWebResponse
  • C # HttpWebRequest типа «application / x-www-form-urlencoded» - как отправить символ «&» в теле контента?
  • Почему я получаю сообщение об ошибке «(304)« Не изменено »на некоторых ссылках при использовании HttpWebRequest?
  • Прокси-базовая аутентификация в C #: ошибка HTTP 407
  • Запрос был прерван: не удалось создать безопасный канал SSL / TLS
  • Войдите на сайт, через C #
  • Могу ли я повторно использовать HttpWebRequest?
  • curl Request с ASP.NET
  • WebClient vs. HttpWebRequest / HttpWebResponse
  • C # - HttpWebRequest POST (Войти в Facebook)
  • Как игнорировать проверку сертификата, когда ssl
  • Interesting Posts

    Ярлык для переключения между виртуальной машиной и операционной системой хоста?

    Совместное использование файлов Windows 10 на локальном wifi ужасно медленно

    NoClassDefFoundError в библиотеке V2 для Google Play Services

    Force R не использовать экспоненциальную нотацию (например, e + 10)?

    Восстановить пул ZFS после создания над ним

    Добавление меток в гистограмму ggplot

    Field.get (obj) возвращает все значения NULL для инъецированных управляемых бинов CDI, тогда как ручные вызовы getters возвращают правильные значения

    Как подключить вентилятор 12 см от Eee PC 701 4G?

    Как найти индекс элемента в векторе?

    Импорт текстового файла в виде отдельной символьной строки

    Сгенерировать новый токен CSRF без перезагрузки всей формы

    Как построить только легенды в ggplot2?

    Требуется ли защита от перенапряжений?

    Безопасно ли использовать HttpClient одновременно?

    Windows 8 из памяти с течением времени: Toke Paged потребляет более 5 ГБ

    Давайте будем гением компьютера.