博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解密gzip压缩的网页数据流(转)
阅读量:6034 次
发布时间:2019-06-20

本文共 1311 字,大约阅读时间需要 4 分钟。

因为采集某个网页遇到问题,一直无法获取页面数据。

经过一番排查,发现该网站会检查客户端的Header信息,如果遇到不明确的Header信息就直接否定,返回0数据。

如果Header信息正确,就会返回经过GZip压缩的数据,这样直接获取网页数据的想法破灭了。

 

实际上.NET已经为我们封装好了GZip和Deflate加解压算法类,都位于 System.IO.Compression 命名空间内。

下面我来演示如何分析并提取经过GZIP压缩的网页数据流。

复制代码
Imports System.Net
Imports System.IO
Imports System.IO.Compression
Imports System.Text
Function GZip2Html(ByVal url AsString) AsString
' HTTP请求
Dim req As HttpWebRequest = HttpWebRequest.Create(url)
req.Method ="GET"'GET 或 POST
req.Accept ="*/*"
req.UserAgent ="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1;)"'这里模拟 XP系统 IE7 的请求字段
req.Referer ="来源地址"
' 一些头信息的模拟
req.Headers("Accept-Language") ="zh-cn"
req.Headers("UA-CPU") ="x86"
req.Headers("Accept-Encoding") ="gzip, deflate"
' HTTP获取
Dim res As HttpWebResponse = req.GetResponse
' 获取数据文本编码
'Dim enc As Encoding = Encoding.GetEncoding(res.CharacterSet) '如果出现乱码请换下面这种方式
Dim enc As Encoding = Encoding.Default
' 创建一个GZip解压流
Dim gz AsNew GZipStream(res.GetResponseStream, CompressionMode.Decompress)
' 用一个临时内存流来保存解压数据
Dim ms AsNew MemoryStream
' 缓冲数据
Dim buf(99) AsByte, i AsInteger=0
' 不断从流中解压数据
WhileTrue
i = gz.Read(buf, 0, 100)
If i =0ThenExitWhile
ms.Write(buf, 0, i)
EndWhile
' 将数据转换为字符
Dim ret AsString= enc.GetString(ms.ToArray)
' 关闭所有的流
gz.Close()
ms.Close()
res.Close()
Return ret
End Function
复制代码

本人测试解压数据成功,其他环境未进行测试,请自行修改。

转载地址:http://fsohx.baihongyu.com/

你可能感兴趣的文章
[Java开发之路](14)反射机制
查看>>
mac gentoo-prefix安装git svn
查看>>
浅尝异步IO
查看>>
C - Train Problem II——(HDU 1023 Catalan 数)
查看>>
Speak loudly
查看>>
iOS-在项目中引入RSA算法
查看>>
[译] 听说你想学 React.js ?
查看>>
gulp压缩合并js与css
查看>>
块级、内联、内联块级
查看>>
Predicate
查看>>
[面试题记录01]实现一个function sum达到一下目的
查看>>
这个季节的忧伤,点到为止
查看>>
mysql通过配置文件进行优化
查看>>
省级网站群建设关注点
查看>>
工作第四天之采集资源
查看>>
我的友情链接
查看>>
H3CS-WLAN、H3CSE-Security认证考试
查看>>
5.0中redis-cli的集群管理测试
查看>>
TFS 2012研发管理能力(5)
查看>>
四种LaunchMode及其使用场景
查看>>