Dans this answer, j'ai décrit comment j'ai eu recours à wrappnig un GZipStream autour du flux de réponse dans un HttpWebResponse, afin de le décompresser..NET: Est-il possible de demander à HttpWebRequest de décompresser automatiquement les réponses gzip?
Le code correspondant ressemble à ceci:
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 ...
}
}
Y at-il un moyen d'obtenir HttpWebResponse pour fournir un flux de-compression, automatiquement? En d'autres termes, un moyen pour moi d'éliminer ce qui suit du code ci-dessus:
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);
Merci.
Cha-ching! Merci. Comment ça m'a manqué? – Cheeso
merci, j'ai corrigé ma question, aussi, d'employer une clause using. – Cheeso
"Il n'est pas nécessaire d'ajouter manuellement l'en-tête HTTP Accept-Encoding" - En outre, si vous le faites, les valeurs "gzip" et "deflate" seront dupliquées dans l'en-tête ce qui peut entraîner le rejet de la requête. – Chad