当要求用gzip COM pression我得到了很多的以下错误页面:
System.IO.InvalidDataException:本 CRC采用gzip页脚不匹配 CRC从DECOM pressed计算 数据
我使用本地GZipStream到DECOM preSS和期待在处理这个。考虑到这一点是有一个变通解决此或其他的GZip库(免费的吗?),它会处理这个问题的正确?
我核实WebResponse的ContentEncoding是GZIP
更新5/11 简化的这段
//来电
公共无效SOSampleGet(字符串URL)
{
//初始化的WebRequest。
的WebRequest =(HttpWebRequest的)WebRequest.Create(URL);
webRequest.Method = WebRequestMethods.Http.Get;
webRequest.KeepAlive = TRUE;
webRequest.Accept =text / html的,是application / xhtml + xml的,应用程序/ XML; Q = 0.9,* / *; Q = 0.8;
webRequest.Headers.Add(接受编码,GZIP,放气);
webRequest.Referer = WebUtil.GetDomain(URL);
HttpWebResponse WebResponse类=(HttpWebResponse)webRequest.GetResponse();
使用(流流= GetStreamForResponse(WebResponse类,READTIMEOUT_CONST))
{
//使用流
}
}
//方法
私有静态流GetStreamForResponse(HttpWebResponse WebResponse类,INT readTimeOut)
{
流流;
开关(webResponse.ContentEncoding.ToUpperInvariant())
{
案GZIP:
流=新GZipStream(webResponse.GetResponseStream(),玉米pressionMode.Decom preSS);
打破;
情况下使用deflate:
流=新DeflateStream(webResponse.GetResponseStream(),玉米pressionMode.Decom preSS);
打破;
默认:
流= webResponse.GetResponseStream();
stream.ReadTimeout = readTimeOut;
打破;
}
返回流;
}
解决方案
怎么样的WebRequest AutomaticDecom pression房产可用,因为.NET 2?只需添加:
webRequest.AutomaticDecom pression = DECOM pressionMethods.GZip | DECOM pressionMethods.Deflate;
这也增加了gzip的,紧缩的接受编码头。
请参阅http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.automaticdecom$p$pssion.aspx
When requesting a page with Gzip compression I am getting a lot of the following errors:
System.IO.InvalidDataException: The CRC in GZip footer does not match the CRC calculated from the decompressed data
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?
I am verifying the webResponse ContentEncoding is GZIP
Update 5/11 A simplified snippit
//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;
}
解决方案
What about the webrequest AutomaticDecompression Property available since .net 2? Simply add:
webRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
It also adds the gzip,deflate to the accept encoding header.
See http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.automaticdecompression.aspx