[Python爬虫] 四、数据抓取之HTTP/HTTPS抓包工具Fiddler
往期内容提要:
- [Python爬虫] 一、爬虫原理之HTTP和HTTPS的请求与响应
- [Python爬虫] 二、爬虫原理之定义、分类、流程与编码格式
- [Python爬虫] 三、数据抓取之Requests HTTP 库
Fiddler是一款强大Web调试工具,它能记录所有客户端和服务器的HTTP请求。 点此下载 Fiddler
一、HTTP代理神器Fiddler工作原理
Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888.
二、Fiddler抓取HTTPS设置
(1) 安装并启动Fiddler;
(2) 对Fiddler进行设置:
- 打开工具栏->Tools->Options->HTTPS选项卡;
- 选中Capture HTTPS CONNECTs (捕捉HTTPS连接);
- 选中Decrypt HTTPS traffic(解密HTTPS通信);/li>
- 另外我们要用Fiddler获取本机所有进程的HTTPS请求,所以中间的下拉菜单中选中...from all processes (从所有进程);
-
选中下方Ignore server certificate errors(忽略服务器证书错误);
-
为 Fiddler 配置Windows信任这个根证书解决安全警告:Trust Root Certificate(受信任的根证书);
(3) Fiddler 主菜单 Tools -> Options…-> Connections选项卡
- 选中Allow remote computers to connect(允许远程连接);
-
Act as system proxy on startup(作为系统启动代理);
(4) 重启Fiddler,使配置生效(很重要)。
三、Fiddler 如何捕获Chrome的会话
设置好后,本机HTTP通信都会经过127.0.0.1:8888代理,会被Fiddler拦截到。因此运行即可捕获,如无法正常捕获:
(1) 安装SwitchyOmega 代理管理 Chrome 浏览器插件
(2) 如图所示,设置代理服务器为127.0.0.1:8888
(3) 通过浏览器插件切换为设置好的代理
四、Fiddler界面
主界面中主要包括四个常用的块:
1.Fiddler的菜单栏,上图绿色部分。包括捕获http请求,停止捕获请求,保存http请求,载入本地session、设置捕获规则等功能。
2.Fiddler的工具栏,上图红色部分。包括Fiddler针对当前view的操作(暂停,清除session,decode模式、清除缓存等)。
3.web Session面板,上图黄色区域,主要是Fiddler抓取到的每条http请求(每一条称为一个session),主要包含了请求的url,协议,状态码,body等信息,详细的字段含义如下图所示:
4.详情和数据统计面板。针对每条http请求的具体统计(例如发送/接受字节数,发送/接收时间,还有粗略统计世界各地访问该服务器所花费的时间)和数据包分析。
- 如inspector面板下,提供headers、textview、hexview,Raw等多种方式查看单条http请求的请求报文的信息;其分为上下两个部分,上半部分是请求头部分,下半部分是响应头部分。对于每一部分,提供了多种不同格式查看每个请求和响应的内容。JPG 格式使用 ImageView 就可以看到图片,HTML/JS/CSS 使用 TextView 可以看到响应的内容。Raw标签可以查看原始的符合HTTP标准的请求和响应头。Auth则可以查看授权Proxy-Authorization 和 Authorization的相关信息。Cookies标签可以看到请求的cookie和响应的set-cookie头信息。
- 而composer面板下,则可以模拟向相应的服务器发送数据的过程,也可以粘贴一次请求的raw http headers,达到模拟请求的目的。
- Filter标签则可以设置Fiddler的过滤规则,来达到过滤http请求的目的。最简单如:过滤内网http请求而只抓取internet的http请求,或则过滤相应域名的http请求。Fiddler的过滤器非常强大,可以过滤特定http状态码的请求,可以过滤特定请求类型的http请求(如css请求,image请求,js请求等),可以过滤请求报文大于或则小于指定大小(byte)的请求。
- AutoResponder面板是Fiddler比较重要且比较强大的功能之一。可用于拦截某一请求,并重定向到本地的资源,或者使用Fiddler的内置响应。可用于调试服务器端代码而无需修改服务器端的代码和配置,因为拦截和重定向后,实际上访问的是本地的文件或者得到的是Fiddler的内置响应。因此,如果要调试服务器的某个脚本文件,可以将该脚本拦截到本地,在本地修改完脚本之后,再修改服务器端的内容,这可以保证,尽量在真实的环境下去调试,从而最大限度的减少bug发生的可能性。
请求 (Request) 部分
- Headers —— 显示客户端发送到服务器的 HTTP 请求的 header,显示为一个分级视图,包含了 Web 客户端信息、Cookie、传输状态等。
- Textview —— 显示 POST 请求的 body 部分为文本。
- WebForms —— 显示请求的 GET 参数 和 POST body 内容。
- HexView —— 用十六进制数据显示请求。
- Auth —— 显示响应 header 中的 Proxy-Authorization(代理身份验证) 和 Authorization(授权) 信息.
- Raw —— 将整个请求显示为纯文本。
- JSON - 显示JSON格式文件。
- XML —— 如果请求的 body 是 XML 格式,就是用分级的 XML 树来显示它。
响应 (Response) 部分
- Transformer —— 显示响应的编码信息。
- Headers —— 用分级视图显示响应的 header。
- TextView —— 使用文本显示相应的 body。
- ImageVies —— 如果请求是图片资源,显示响应的图片。
- HexView —— 用十六进制数据显示响应。
- WebView —— 响应在 Web 浏览器中的预览效果。
- Auth —— 显示响应 header 中的 Proxy-Authorization(代理身份验证) 和 Authorization(授权) 信息。
- Caching —— 显示此请求的缓存信息。
- Privacy —— 显示此请求的私密 (P3P) 信息。
- Raw —— 将整个响应显示为纯文本。
- JSON - 显示JSON格式文件。
- XML —— 如果响应的 body 是 XML 格式,就是用分级的 XML 树来显示它 。
五、使用Fiddler进行HTTP断点调试
(1)Fiddler可以做到:
-
修改HTTP请求头信息。例如修改请求头的UA, Cookie, Referer 信息,通过“伪造”相应信息达到达到相应的目的(调试,模拟用户真实请求等)。
-
构造请求数据,突破表单的限制,随意提交数据。避免页面js和表单限制影响相关调试。
-
拦截响应数据,修改响应实体。
(2)两种方式设置断点:
- 方式一:fiddler菜单栏->rules->automatic Breakpoints->选择断点方式,这种方式下设定的断点会对之后的所有HTTP请求有效。
有两个断点位置:
a. before response。也就是发送请求之后,但是Fiddler代理中转之前,这时可以修改请求的数据。
b.after response。也就是服务器响应之后,但是在Fiddler将响应中转给客户端之前。这时可以修改响应的结果。
- 方式二:命令行下输入。Bpafter xxx或者bpv,bpu,bpm等设置断点(详见后文)。
(3)三种方式终止断点:
-
在inspector界面点击“run complete“即会终止本次HTTP请求的断点。
-
输入go命令,也会使得当前的请求跳过断点。
-
在rules->auto breakpoint中disabled断点即可。
六、Fiddler内置命令
Fiddler提供了一系列内置的函数用于筛选和操作session。输入命令的位置在web session管理面板的下方(通过快捷键alt+q可以focus到命令行)。
命令名称 | 作用 |
---|---|
select | 选择所有相应类型(指content-type)为指定类型的HTTP请求 |
allbut | 选择所有响应类型不是给定类型的HTTP请求 |
?text | 选择所有 URL 匹配问号后的字符的全部 session |
>size <size | 选择响应大小大于某个大小(单位是b)或者小于某个大小的所有HTTP请求 |
=status | 选择响应状态等于给定状态的所有HTTP请求。 |
@host | 选择包含指定 HOST 的全部 HTTP请求。例如:@****.net |
Bpafter Bps, bpv, bpm, bpu | 批量设置断点 |
特别说明:
(1) select命令
选择所有相应类型(指content-type)为指定类型的HTTP请求,如选择图片,使用命令select image.而select css则可以选择所有相应类型为css的请求,select html则选择所有响应为HTML的请求。
(2) allbut命令
allbut命令用于选择所有响应类型不是给定类型的HTTP请求。如allbut image用于选择所有相应类型不是图片的session(HTTP请求),该命令还有一个别名keeponly.需要注意的是,keeponly和allbut命令是将不是该类型的session删除,留下的都是该类型的响应。因此,如果你执行allbut xxxx(不存在的类型),实际上类似与执行cls命令(删除所有的session, ctrl+x快捷键也是这个作用)。
(3) Bpafter, Bps, bpv, bpm, bpu
这几个命令主要用于批量设置断点:
Bpafter xxx: 中断 URL 包含指定字符的全部 session 响应;
Bps xxx: 中断 HTTP 响应状态为指定字符的全部 session 响应;
Bpv xxx: 中断指定请求方式的全部 session 响应;
Bpm xxx: 中断指定请求方式的全部 session 响应。等同于bpv xxx;
Bpu xxx:与bpafter类似。
当这些命令没有加参数时,会清空所有设置了断点的HTTP请求。
后期内容提要:
- [Python爬虫] 五、非结构化数据提取之正则表达式re模块
- [Python爬虫] 六、非结构化数据提取之XPath与lxml类库
- [Python爬虫] 七、结构化数据提取之JSON与JsonPATH
- [Python爬虫] 八、动态HTML处理之Selenium与PhantomJS
- [Python爬虫] 九、机器图像识别之机器视觉与Tesseract
- [Python爬虫] 十、机器图像识别之文字、验证码识别
- [Python爬虫] 十一、Scrapy 框架
如果您有任何疑问或者好的建议,期待你的留言与评论!