Para .NET Core las cosas son un poco más complicadas. Un GZipStream
se necesita, ya que no es una propiedad (como la escritura) para AutomaticCompression
Consideremos el siguiente ejemplo 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}";
}
}
}
supongo Rick Strahl debe estar mal. ¿Lo has intentado tú mismo? – Keltex
gracias - solo trato de entender las cosas, ¿me puede decir si esto es correcto? (a) si NO agrega esta línea "AcceptEncoding" entonces - si descarga un archivo no comprimido => funciona FINE - si descarga un archivo comprimido => ISSUE (descargará el archivo pero se verá dañado, como no se ha descomprimido) (b) si agrega esta línea "AcceptEncoding", entonces: - si descarga un archivo no comprimido => todavía funciona FINE - si descarga un archivo comprimido => funciona bien (será sin comprimir) ¿Es esto correcto? – Greg
@Greg Ninguna de las opciones. La segunda línea no se trata de descargar archivos que quizás ya estén comprimidos (es decir, archivos zip), sino de descargar recursos web que pueden comprimirse bajo demanda (es decir, archivos html). Si no pone la segunda línea, un servidor web con buen comportamiento no le enviará archivos comprimidos. Si el servidor web tiene la capacidad de comprimir archivos, solo lo hará si coloca la segunda línea. –