2010-12-31 40 views
37

Có cách nào nhanh chóng giải nén phản hồi gzip được tải xuống bằng phương thức WebClient.DownloadString() không? Bạn có bất cứ gợi ý nào về cách xử lý các phản hồi gzip với WebClient không?Giải nén phản hồi gzip từ WebClient

Trả lời

72

Cách dễ nhất để thực hiện việc này là sử dụng được xây dựng trong automatic decompression với lớp HttpWebRequest.

var request = (HttpWebRequest)HttpWebRequest.Create("http://stackoverflow.com"); 
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate"); 
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 

Để làm điều này với một WebClient bạn phải làm cho lớp học của riêng của bạn bắt nguồn từ WebClient và ghi đè lên các phương pháp GetWebRequest().

public class GZipWebClient : WebClient 
{ 
    protected override WebRequest GetWebRequest(Uri address) 
    { 
     HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address); 
     request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 
     return request; 
    } 
} 

Cũng thấy điều này SO chủ đề: Does .NET's HttpWebResponse uncompress automatically GZiped and Deflated responses?

+1

là nó không cần thiết để xác định tiêu đề acceptencoding cho lớp WebClient có nguồn gốc? – user3791372

Các vấn đề liên quan