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

  • Установите SecurityProtocol (Ssl3 или TLS) в .net HttpWebRequest за запрос
  • Данные формы сообщения с использованием HttpWebRequest
  • Как игнорировать проверку сертификата, когда ssl
  • Как очистить кэш HttpWebRequest
  • Прокси-базовая аутентификация в C #: ошибка HTTP 407
  • .NET: Можно ли заставить HttpWebRequest автоматически распаковывать ответы gzip'd?
  • Могу ли я повторно использовать HttpWebRequest?
  • как изменить исходный IP-адрес в HttpWebRequest
  • Получение кода состояния Http (200, 301, 404 и т. Д.) Из HttpWebRequest и HttpWebResponse
  • C # как правильно выполнить HTTP-запрос GET
  • Как отправить JSON на сервер?
  • Давайте будем гением компьютера.