هل ل. NET HttpWebResponse إلغاء ضغط GZiped وبددت الردود تلقائيا؟

StackOverflow https://stackoverflow.com/questions/678547

سؤال

وأنا أحاول القيام به طلب أن يقبل استجابة مضغوطة

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 المتشعب الردود

وأعتقد أن لديك لضغط تيار نفسك. وهنا مقال عن كيفية القيام بذلك:

<اقتباس فقرة>   

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top