Автоматически распаковывать ответ 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 )

  • Загрузка файлов на файловый сервер с использованием classа webclient
  • Какая разница между classами WebClient и HTTPWebRequest в .NET?
  • C # WebClient отключить кеш
  • Загрузите и загрузите двоичный файл на / из FTP-сервера в C # /. NET
  • Как изменить таймаут на объекте .NET WebClient
  • Как получить код статуса из веб-клиента?
  • Возможно ли передать аутентификацию из Webbrowser в WebRequest
  • ASP.NET-controller: asynchronous модуль или обработчик завершен, пока асинхронная операция все еще находится на рассмотрении
  • Как мне войти на сайт с помощью WebClient?
  • Распаковка gzip-ответа от WebClient
  • HTTP POST возвращает ошибку: 417 «Ожидание не выполнено».
  • Interesting Posts

    Выполнить JavaScript до и после запуска f: ajax listener

    Способ ng-повторить определенное количество раз вместо повторения по массиву?

    Поддерживает ли Dapper поддержку табличных значений SQL 2008?

    Установить заголовок страницы с помощью UI-Router

    Следует ли заменить использование addJSONData jqGrid на использование setGridParam () и trigger (‘reloadGrid’)?

    Каково правильное использование schema.org SiteNavigationElement?

    Помещает ли медиа-файлы в архивы экономить место?

    Сравнение строк в Objective-C

    Разница между char a = “string”; char * p = “string”;

    Использование protractorа с петлями

    не может преобразовать ‘std :: basic_string ‘ в ‘const char *’ для аргумента ‘1’ в ‘int system (const char *)’

    Связывание FirebaseRecyclerViewAdapter с булевой / строковой картой.

    Что является хорошим эквивалентом subprocess.check_call, который возвращает содержимое stdout?

    Как запустить Windows 8 в безопасном режиме из-за фанкового драйвера nVidia

    Java: файл CSV Easy Read / Write

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