Подтвердить что ты не робот

Распаковка gzip-ответа от WebClient

Есть ли быстрый способ распаковать gzip-ответ, загруженный с помощью метода WebClient.DownloadString()? Есть ли у вас какие-либо предложения о том, как обрабатывать ответы gzip с помощью WebClient?

4b9b3361

Ответ 1

Самый простой способ сделать это - использовать встроенную автоматическую декомпрессию с классом HttpWebRequest.

var request = (HttpWebRequest)HttpWebRequest.Create("http://stackoverflow.com");
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

Чтобы сделать это с помощью WebClient, вы должны сделать свой собственный класс, полученный из WebClient, и переопределить метод GetWebRequest().

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

Также см. этот поток SO: HttpWebResponse.NET автоматически распаковывает GZiped и Deflated ответы?