抓取解压

来源:互联网 发布:健身大数据 编辑:程序博客网 时间:2024/04/28 16:24
对于一个经过Gzip压缩的网页,如果网页直接用浏览器打开,当然没什么问题,因为浏览器会自动的替您解压,当然这个时候,你查看网页源代码,看到的应该是正常的html代码。
可是如果使用HttpWebResponse来获取网页内容的时候,就比较麻烦,因为,你首先获取到的是一个回应流,当然,对于网页来说,本质上是个文本内容,所以要使用StreamReader来读取,当然这个时候需要将网页的编码格式给扔进去,如果没有Gzip压缩,那么一路顺利,肯定能得到正常的结果,一旦压缩了,那麻烦就来了。
无Gzip压缩情况:
Gzip压缩的HttpWebResponse的处理
有Gzip压缩,但无解压:
Gzip压缩的HttpWebResponse的处理
Gzip压缩的HttpWebResponse的处理
可以看的出来Gzip压缩的流,用平常的方式取到的内容是乱码。
有Gzip压缩,有解压的情况:
Gzip压缩的HttpWebResponse的处理
完整代码如下:
无Gzip压缩:
          HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create("http://blog.sina.com.cn/dalishuishou");
          HttpWebResponse wsp = (HttpWebResponse)wr.GetResponse();

          Stream st = wsp.GetResponseStream();
          StreamReader sr = new StreamReader(st, Encoding.Default);
          string s = sr.ReadToEnd();
          Console.WriteLine(s);
有Gzip压缩:
          HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create("http://icy-rainy-day.blog.sohu.com/");
          HttpWebResponse wsp = (HttpWebResponse)wr.GetResponse();

          Stream st = wsp.GetResponseStream();
          if (wsp.ContentEncoding.ToLower().Contains("gzip"))
          {
              st = new GZipStream(st, CompressionMode.Decompress);
          }
          StreamReader sr = new StreamReader(st, Encoding.Default);
          string s = sr.ReadToEnd();
          Console.WriteLine(s);
打完收工。
1 0
原创粉丝点击