Pergunta

Eu estou tentando fazer um pedido que aceita uma resposta comprimido

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

Gostaria de saber se quando eu adicionar a segunda linha eu vou ter que lidar com a descompressão manualmente.

Foi útil?

Solução

Eu encontrei a resposta.

Você pode alterar o código para:

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

E você terá descompressão automática. Não há necessidade de mudar o resto do código.

Outras dicas

Para .NET núcleo coisas são um pouco mais envolvidos. A GZipStream é necessário, pois não há uma propriedade (como da escrita) para AutomaticCompression Considere o seguinte exemplo 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}";
        }
    }
}
respostas

GZIP e desinflar não são tratados automaticamente. Consulte este artigo para os detalhes: HttpWebRequest e GZip Http Respostas

Eu acho que você tem que descompactar o fluxo de si mesmo. Aqui está um artigo sobre como fazê-lo:

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top