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
37
A
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?
là nó không cần thiết để xác định tiêu đề acceptencoding cho lớp WebClient có nguồn gốc? – user3791372