In this answer, beschrieb ich, wie ich einen GZipStream um den Antwort-Stream in einer HttpWebResponse Wrappnig, um es zu entpacken..NET: Ist es möglich, HttpWebRequest zu erhalten, um Gzip-Antworten automatisch zu dekomprimieren?
Der entsprechende Code sieht wie folgt aus:
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 ...
}
}
Gibt es eine Möglichkeit HttpWebResponse zu bekommen Dekomprimieren Strom bereitzustellen, automatisch? Mit anderen Worten, eine Möglichkeit für mich, das Folgende aus dem obigen Code zu eliminieren:
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);
Danke.
Cha-ching! Vielen Dank. Wie habe ich das vermisst? – Cheeso
danke, ich habe auch meine Frage behoben, um eine using-Klausel zu verwenden. – Cheeso
"Es ist nicht notwendig, den Accept-Encoding-HTTP-Header manuell hinzuzufügen" - Wenn Sie dies tun, werden die Werte "gzip" und "deflate" in der Kopfzeile dupliziert, was dazu führen kann, dass einige Server die Anfrage ablehnen. – Chad