Dot-Net
.NET:是否可以讓 HttpWebRequest 自動解壓縮 gzip 的響應?
在這個答案中,我描述了我如何在 HttpWebResponse 中的響應流周圍包裝一個 GZipStream,以便對其進行解壓縮。
相關程式碼如下所示:
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; using (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 ... } }有沒有辦法讓 HttpWebResponse 自動提供解壓縮流?換句話說,我可以從上面的程式碼中消除以下內容:
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);謝謝。
使用HttpWebRequest.AutomaticDecompression屬性,如下所示:
HttpWebRequest hwr = (HttpWebRequest) WebRequest.Create(url); hwr.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;無需手動添加
Accept-EncodingHTTP 標頭;使用該屬性時將自動添加它。(另外,我知道這只是範常式式碼,但
HttpWebResponse對象應該放在一個using塊中,以便在您完成使用後正確處理它。)