هل ل. NET HttpWebResponse إلغاء ضغط GZiped وبددت الردود تلقائيا؟
-
21-08-2019 - |
سؤال
وأنا أحاول القيام به طلب أن يقبل استجابة مضغوطة
var request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
وأنا أتساءل عما إذا كان عند إضافة السطر الثاني سوف يكون لي للتعامل مع الضغط يدويا.
المحلول
ولقد وجدت الجواب.
يمكنك تغيير رمز إلى:
var request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
وسيكون لديك الضغط التلقائي. لا حاجة لتغيير بقية التعليمات البرمجية.
نصائح أخرى
لأشياء الأساسية. NET هي أكثر من ذلك بقليل المشاركة. وهناك حاجة إلى GZipStream
كما ليس هناك خاصية (في الكتابة) لAutomaticCompression
نتأمل على سبيل المثال 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}";
}
}
}
لا يتم التعامل مع GZIP وفرغ الردود تلقائيا. انظر هذه المقالة للحصول على التفاصيل: HttpWebRequest و gzip المتشعب الردود
وأعتقد أن لديك لضغط تيار نفسك. وهنا مقال عن كيفية القيام بذلك:
<اقتباس فقرة> اقتباس فقرة>لا تنتمي إلى StackOverflow