HttpWebRequest的&放大器;本机的GZip的COM pression放大器、本机、HttpWebRequest、pression

2023-09-02 21:10:02 作者:独久厌闹

当要求用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_C​​ONST))
    {
        //使用流
    }
}

//方法
私有静态流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

 
精彩推荐
图片推荐