example code c# .net httpwebrequest gzip deflate

c# - code - ¿HttpWebResponse de.NET descomprime automáticamente las respuestas GZiped y Deflated?



webrequest post parameters c# (4)

Estoy tratando de hacer una solicitud que acepta una respuesta comprimida

var request = (HttpWebRequest)HttpWebRequest.Create(requestUri); request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");

Me pregunto si cuando añada la segunda línea tendré que manejar la descompresión manualmente.



Encontré la respuesta.

Puede cambiar el código a:

var request = (HttpWebRequest)HttpWebRequest.Create(requestUri); request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

Y tendrás descompresión automática. No es necesario cambiar el resto del código.



Para .NET Core las cosas son un poco más complicadas. Se necesita un GZipStream ya que no hay una propiedad (a partir de la escritura) para AutomaticCompression Considere el siguiente ejemplo de GET :

var req = WebRequest.CreateHttp(uri); /* * Headers */ req.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate"; /* * Execute */ try { using (var resp = await req.GetResponseAsync()) { using (var str = resp.GetResponseStream()) using (var gsr = new GZipStream(str, CompressionMode.Decompress)) using (var sr = new StreamReader(gsr)) { string s = await sr.ReadToEndAsync(); } } } catch (WebException ex) { using (HttpWebResponse response = (HttpWebResponse)ex.Response) { using (StreamReader sr = new StreamReader(response.GetResponseStream())) { string respStr = sr.ReadToEnd(); int statusCode = (int)response.StatusCode; string errorMsh = $"Request ({url}) failed ({statusCode}) on, with error: {respStr}"; } } }