2013-09-25 148 views
2

我有一個程序,使大量的HttpWebRequests,我讀了關於使用gzip壓縮來加快下載的響應數據。我知道gzip是什麼,它是如何工作的,但我不知道它在C#中的工作原理。C#HttpWebRequest - 使用Gzip壓縮

比方說,我有一個簡單的GET請求:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://google.com"); 
request.Method = "GET"; 
WebResponse response = request.GetResponse(); 

我怎麼能做出響應數據的gzip壓縮?我如何顯示壓縮的大小,然後顯示未壓縮的大小?

感謝

回答

3

請確保您在您的請求中聲明您可以接受gzip'd回覆。因此,在您的代碼創建請求後,請執行以下操作:

request.Headers.Add("Accept-Encoding", "gzip"); 

這將告訴服務器將其返回壓縮,如果可以的話。

我能想到的顯示尺寸差異的唯一方法是進行2個調用,一個調用壓縮,另一個不調用,並比較返回的響應流的長度。

9

爲的GZip如何與一般Web請求的概要見this page

您需要發送的具體標題是Accept-Encoding: gzip。通常情況下,您需要自己將其添加到請求中(通過Headers集合),但有一條捷徑。每this answer,所有您需要做的是添加

request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 

到您的代碼。

請注意,您可能無法獲得壓縮/解壓縮的大小 - 請求會在它自動進入時自動解壓縮。但是,由於您無法提前知道服務器是否會平均嘗試向你發送GZip頁面,這對測試不是一件有用的事情。

+0

之後,如果我想從響應中讀取數據(通常我只是使用StreamReader),是否需要做特別的事情? – user2764359

+0

沒有。這就是爲什麼它是*自動*減壓。據我所知,它會爲你處理這一切。 (我自己沒有嘗試過,但我會的,現在我知道了!) – Bobson

+0

非常感謝! – user2764359