HttpWebRequest request;
//...
HttpWebResponse resp = request.GetResponse();
Int L = resp.ContentLength;c# 人多,就发到这边来了。我获取 http://www.163.com 这类的页面时,上面代码的这个resp.ContentLength值为-1
我想取得下载进度,这个resp.ContentLength=-1就不能进行设置进度,这个该怎么取到页面的大小?

解决方案 »

  1.   

    它返回的是gzip压缩格式的。    HttpWebRequest request = HttpWebRequest.Create("http://www.163.com") as HttpWebRequest;
        request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
        request.Headers.Add("Accept-Encoding", "gzip,deflate");
        request.AutomaticDecompression = DecompressionMethods.None;
        HttpWebResponse resp = request.GetResponse() as HttpWebResponse;
        long L = resp.ContentLength;
        System.IO.Stream responseStream = responseStream = resp.GetResponseStream();    responseStream = new System.IO.Compression.GZipStream(responseStream, System.IO.Compression.CompressionMode.Decompress);
        System.IO.StreamReader Reader = new System.IO.StreamReader(responseStream, Encoding.Default);
    String result = Reader.ReadToEnd();
      

  2.   

    www.163.com
    使用的是Transfer-Encoding:chunked方法,没有Conntent-Length这个响应头,无法得到resp.ContentLength属性, 你需要先全都得到内容
      

  3.   

    是的
    有时候,Web服务器生成HTTP Response是无法在Header就确定消息大小的,这时一般来说服务器将不会提供Content-Length的头信息,而采用Chunked编码动态的提供body内容的长度。
    进行Chunked编码传输的HTTP Response会在消息头部设置:Transfer-Encoding: chunked表示Content Body将用Chunked编码传输内容。