Há algum tempo eu escrevi sobre como compactar o output de uma página ASP.NET. O principal benefício desta técnica é compactar o resultado para que menos dados sejam transportados entre o cliente e o servidor. Quem faz a descompactação do conteúdo é o browser, ou melhor, a versão 1.1 do HTTP.
Mas quando precisamos invocar a URL dinamicamente, via qualquer outro tipo de aplicação, como um serviço Windows, fica a nosso encargo criar entradas no cabeçalho para indicar que a aplicação suporta compactação e, além disso, precisamos identificar se o conteúdo está ou não compactado e, caso esteja, devemos recorrer a um código semelhante ao que está no artigo para ter acesso ao conteúdo em seu formato legível.
As keys utilizadas são Accept-encoding (remessa) e Content-Encoding (retorno). O código abaixo exibe a forma que voce pode proceder para indicar a requisição que a tua aplicação suporta o conteúdo compactado e, quando receber, voce pode verificar se o conteúdo está ou não compactado:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(URL);
req.Headers.Add(“Accept-encoding“, “gzip”);
using (req as IDisposable)
{
using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
{
Debug.WriteLine(resp.Headers[“Content-Encoding“]);
}
}
Observação: De nada adianta voce informar a requisição que a sua aplicação suporta a compactação de conteúdo se a página/aplicação que está tentando acessar não suportar essa técnica.