Автоматически распаковывать ответ gzip через WebClient.DownloadData

Я хочу автоматически распаковать GZiped-ответ. Я использую следующий fragment:

mywebclient.Headers[HttpRequestHeader.AcceptEncoding] = "gzip"; mywebclient.Encoding = Encoding.UTF8; try { var resp = mywebclient.DownloadData(someUrl); } 

Я проверил HttpRequestHeader enum , и нет возможности сделать это через Headers

Как я могу автоматически распаковать resp? или Есть ли другая функция, которую я должен использовать вместо mywebclient.DownloadData ?

WebClient использует HttpWebRequest под обложками. И HttpWebRequest поддерживает дезакцию gzip / deflate. См. Свойство HttpWebRequest AutomaticDecompression

Однако class WebClient не раскрывает это свойство напрямую. Таким образом, вам придется извлечь из него, чтобы установить свойство на базовом HttpWebRequest.

 class MyWebClient : WebClient { protected override WebRequest GetWebRequest(Uri address) { HttpWebRequest request = base.GetWebRequest(address) as HttpWebRequest; request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; return request; } } 

В зависимости от вашей ситуации, может быть проще выполнить декомпрессию самостоятельно.

 using System.IO.Compression; using System.Net; try { var client = new WebClient(); client.Headers[HttpRequestHeader.AcceptEncoding] = "gzip"; var responseStream = new GZipStream(client.OpenRead(myUrl), CompressionMode.Decompress); var reader = new StreamReader(responseStream); var textResponse = reader.ReadToEnd(); // do stuff } 

Для ясности я создал все временные переменные. Все это можно textResponse только для client и textResponse .

Или, если простота является целью, вы даже можете сделать это, используя ServiceStack.Text от Demis Bellot :

 using ServiceStack.Text; var resp = "some url".GetJsonFromUrl(); 

(Существуют другие .Get*FromUrl расширения .Get*FromUrl )

  • Аутентификация и запрос временной шкалы пользователя с помощью API Twitter 1.1 oAuth
  • Как мне войти на сайт с помощью WebClient?
  • Печально известная, но без ответа проблема загрузки файла, когда требуется защита Windows
  • Возможно ли передать аутентификацию из Webbrowser в WebRequest
  • Как получить код статуса из веб-клиента?
  • C # - Как сделать HTTP-вызов
  • ASP.NET-controller: asynchronous модуль или обработчик завершен, пока асинхронная операция все еще находится на рассмотрении
  • Установите тайм-аут для webClient.DownloadFile ()
  • Символы в строке изменились после загрузки HTML из Интернета
  • WebClient vs. HttpWebRequest / HttpWebResponse
  • Как получить строку json из url?
  • Interesting Posts

    Отображение части веб-страницы на веб-обозревателе Android

    Android – увеличение / уменьшение изображения RelativeLayout с распространением / пинчем

    Глобальная настройка для AsNoTracking ()?

    Как динамически добавлять оператор OR в предложение WHERE в LINQ

    Область доступа AngularJS от внешней функции js

    «Новый документ Word» отсутствует в контекстном меню правой кнопки мыши?

    Зачем нужна ошибка? Идентификатор проекта, используемый для вызова API разработчика Google Play, не был связан в консоли разработчика Google Play. ‘

    Разница между char * и char

    Удаленный рабочий стол от Win10 -> Windows Server 2016 медленный, но быстрый наоборот

    C # – Как сделать две формы ссылки друг на друга

    Не удается войти в систему нормально, проблемы с рабочим столом и пользовательским профилем в безопасном режиме

    Обнаружение, если аудиофайл FLAC или WAVPACK НЕ изначально кодирован из источника с потерями

    почему remove-migration запускает мое приложение?

    Невозможно выполнить удаленный сценарий poweshell на сервере Windows Server 2016 без установки

    Почему связывание жизней имеет значение только с изменяемыми ссылками?

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