Pregunta

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 agrego la segunda línea voy a tener que manejar la descompresión de forma manual.

¿Fue útil?

Solución

He encontrado la respuesta.

Puede cambiar el código para:

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

Y tendrá descompresión automática. No hay necesidad de cambiar el resto del código.

Otros consejos

Para las cosas básicas .NET son un poco más complicado. Se necesita una GZipStream ya que no es una propiedad (como la escritura) para AutomaticCompression Considere el siguiente GET ejemplo:

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}";
        }
    }
}

GZIP y desinflar las respuestas no se manejan de forma automática. Consulta este artículo para los detalles: HttpWebRequest y gzip respuestas HTTP

Yo creo que hay que descomprimir el flujo de sí mismo. He aquí un artículo sobre cómo hacerlo:

  

http://www.west-wind.com/WebLog/posts /102969.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top