.NET: Is it possible to get HttpWebRequest to automatically decompress gzip'd responses?

Posted by Cheeso on Stack Overflow See other posts from Stack Overflow or by Cheeso
Published on 2010-05-12T02:03:35Z Indexed on 2010/05/12 2:14 UTC
Read the original article Hit count: 306

Filed under:
|
|

In this answer, I described how I resorted to wrappnig a GZipStream around the response stream in a HttpWebResponse, in order to decompress it.

The relevant code looks like this:

  HttpWebRequest hwr = (HttpWebRequest) WebRequest.Create(url);
  hwr.CookieContainer =
      PersistentCookies.GetCookieContainerForUrl(url);
  hwr.Accept = "text/xml, */*";
  hwr.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
  hwr.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-us");
  hwr.UserAgent = "My special app";
  hwr.KeepAlive = true;

  var resp = (HttpWebResponse) hwr.GetResponse();

  using(Stream s = resp.GetResponseStream())
  {
      Stream s2 = s;
      if (resp.ContentEncoding.ToLower().Contains("gzip"))
          s2 = new GZipStream(s2, CompressionMode.Decompress);
      else if (resp.ContentEncoding.ToLower().Contains("deflate"))
          s2 = new DeflateStream(s2, CompressionMode.Decompress);

       ... use s2 ...
  }

Is there a way to get HttpWebResponse to provide a de-compressing stream, automatically? In other words, a way for me to eliminate the following from the above code:

      Stream s2 = s;
      if (resp.ContentEncoding.ToLower().Contains("gzip"))
          s2 = new GZipStream(s2, CompressionMode.Decompress);
      else if (resp.ContentEncoding.ToLower().Contains("deflate"))
          s2 = new DeflateStream(s2, CompressionMode.Decompress);

Thanks.

© Stack Overflow or respective owner

Related posts about httpwebrequest

Related posts about gzip