HttpWebRequest amp; Native GZip Compression(HttpWebRequest amp;原生 GZip 压缩)
问题描述
请求使用 Gzip 压缩的页面时,我收到很多以下错误:
When requesting a page with Gzip compression I am getting a lot of the following errors:
System.IO.InvalidDataException:GZip 页脚中的 CRC 与CRC 从解压后计算出来的数据
System.IO.InvalidDataException: The CRC in GZip footer does not match the CRC calculated from the decompressed data
我正在使用本机 GZipStream 进行解压缩,并且正在考虑解决这个问题.考虑到这一点,是否有解决此问题或其他 GZip 库(免费?)可以正确处理此问题的解决方法?
I am using native GZipStream to decompress and am looking at addressing this. With that in mind is there a work around for addressing this or another GZip library (free?) which will handle this issue properly?
我正在验证 webResponse ContentEncoding 是 GZIP
I am verifying the webResponse ContentEncoding is GZIP
更新 5/11一个简化的片段
//Caller
public void SOSampleGet(string url)
{
// Initialize the WebRequest.
webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = WebRequestMethods.Http.Get;
webRequest.KeepAlive = true;
webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
webRequest.Headers.Add("Accept-Encoding", "gzip,deflate");
webRequest.Referer = WebUtil.GetDomain(url);
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
using (Stream stream = GetStreamForResponse(webResponse, READTIMEOUT_CONST))
{
//use stream
}
}
//Method
private static Stream GetStreamForResponse(HttpWebResponse webResponse, int readTimeOut)
{
Stream stream;
switch (webResponse.ContentEncoding.ToUpperInvariant())
{
case "GZIP":
stream = new GZipStream(webResponse.GetResponseStream(), CompressionMode.Decompress);
break;
case "DEFLATE":
stream = new DeflateStream(webResponse.GetResponseStream(), CompressionMode.Decompress);
break;
default:
stream = webResponse.GetResponseStream();
stream.ReadTimeout = readTimeOut;
break;
}
return stream;
}
推荐答案
自 .net 2 起可用的 webrequest AutomaticDecompression 属性怎么样?只需添加:
What about the webrequest AutomaticDecompression Property available since .net 2? Simply add:
webRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
它还将 gzip,deflate 添加到接受编码标头中.
It also adds the gzip,deflate to the accept encoding header.
请参阅 http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.automaticdecompression.aspx
这篇关于HttpWebRequest &原生 GZip 压缩的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:HttpWebRequest &原生 GZip 压缩
基础教程推荐
- C# - 将浮点数转换为整数...并根据余数更改整数 2022-01-01
- 当键值未知时反序列化 JSON 2022-01-01
- 从 VB6 迁移到 .NET/.NET Core 的最佳策略或工具 2022-01-01
- C# - 如何列出发布到 ASPX 页面的变量名称和值 2022-01-01
- 使用 SED 在 XML 标签之间提取值 2022-01-01
- Page.OnAppearing 中的 Xamarin.Forms Page.DisplayAlert 2022-01-01
- 我什么时候应该使用 GC.SuppressFinalize()? 2022-01-01
- 覆盖 Json.Net 中的默认原始类型处理 2022-01-01
- 创建属性设置器委托 2022-01-01
- 如何使用OpenXML SDK将Excel转换为CSV? 2022-01-01