Dla .NET Core rzeczy są nieco bardziej zaangażowane. GZipStream
jest potrzebne, gdyż nie ma własność (stan na piśmie) do AutomaticCompression
Rozważmy następujący przykład: 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}";
}
}
}
Chyba Rick Strahl musi być nie tak. Czy próbowałeś sam? – Keltex
dzięki - tylko próbując zrozumieć rzeczy, czy możesz mi powiedzieć, czy to prawda? (a) jeśli NIE dodasz tej linii "AcceptEncoding", a następnie - jeśli pobierzesz nieskompresowany plik => działa FINE - jeśli pobierzesz skompresowany plik => ISSUE (pobierze plik, ale będzie wyglądać na uszkodzony, jako nie był nieskompresowany) (b) jeśli dodasz tę linię "AcceptEncoding", to: - jeśli pobierzesz nieskompresowany plik => nadal działa FINE - jeśli pobierzesz skompresowany plik => działa dobrze (będzie nieskompresowany) Czy to prawda? – Greg
@Greg Żadne z opcji. Druga linia nie polega na pobieraniu plików, które mogą być już skompresowane (np. Pliki zip), ale na pobieraniu zasobów sieciowych, które mogą być kompresowane na żądanie (np. Pliki HTML). Jeśli nie umieścisz drugiej linii, dobrze zachowany serwer WWW nie będzie w ogóle wysyłać skompresowanych plików. Jeśli serwer WWW ma możliwość kompresowania plików, zrobi to tylko wtedy, gdy wstawisz drugi wiersz. –