简介
Fiddler 是一个 http 抓包工具,具有以下功能:
- 能够记录客户端和服务器之间的所有 HTTP 请求,针对 HTTP 请求分析请求数据,设置断点等。
- 能够修改请求的数据,并能实现请求自动重定向,从而修改服务器返回的数据。
场景
本文主要介绍如何用 fiddler 抓取 android 手机上的请求。
配置
配置 Fiddler
安装完后,点击菜单栏上的 Tools
-> Options
然后去修改下面两个地方:
我们可以设置本地代理端口号,默认为 8888,一般不改。然后打开远程连接来允许调试手机。
如果项目中使用的是 https 协议,则需要按上图开启 https 支持。完成后,重启 Fiddler 即可。
配置手机
将手机和电脑连在同一局域网下,然后进入当前连接的 wifi,设置代理:
需要设置上面的服务器和端口,其中服务器地址(即电脑的 IP 地址)可以看 Fiddler 上的 Online
:
将鼠标放在 Online
上就可以看到一个弹框,里面有 IP 地址: 172.18.4.156。你也可以打开 cmd,输入命令 ipconfig
就可以看到。端口号可以在上面第一张图上设置,默认为 8888。
由于项目中使用的是 https,我们手机需要下载证书才能支持。那么我们进入手机浏览器,输入[服务器地址]:[端口号]
,如172.18.4.156:8888
。然后点击链接下载证书即可。
Fiddler 使用
查看请求以及请求回来的数据
上面配置完后,手机进行请求就可以在 Fiddler 面板的左边看到会话了。点击我们关心的某个会话,然后在右边的面板选择 Inspectors
就可以看到请求的数据和返回的数据了。
请求太多?仅显示我们想要的请求
我们可以仅仅过滤我们需要的某个域名的请求:
点击面板右边的 Filters
,然后勾选 Use Filters
,然后将 No Host Filter
改成 Show only the following Hosts
,然后将左侧面板里面想显示的 host 填进去,再点击 Changes not yet saved
即可。
拦截指定请求,返回我们自定义的数据
譬如说我们需要将 B 请求的数据替换为 A 的数据:
- 拿到 A 请求返回的数据:首先右键点击面板左边的你想要的 A 请求,点击
save
->Response
->Response Body
将 A 请求返回的 json 串保存下来。 - 格式化 json 串:我保存下来的 json 串被插入了一些字符进去了,我们需要将这些字符删除掉,我们可以进入前面的这个网站,将 json 串拷贝进去,然后点击格式化,如果格式化不成功,看看哪里有不连贯的地方(看哪一行的字符串后面有空白,一般第一行就有),然后直接将该行删掉,然后将该行的上下两行连起来,直到成功格式化。 成功后将数据保存到本地如 a.json。
- 点击面板右边的
AutoResponder
,勾选Enable Rules
(开启自动重定向功能,这样我们就可以在下面的面板添加重定向规则了),Unmatched request passthrough
(仅重定向满足条件的请求) - 手机开始进行 B 请求,然后将 B 请求从左边面板拖动到右边,就可以看到:
- 点击拖到右边面板的请求,然后将将前面保存的想替换的数据导进来,然后点击
save
即可。
我们除了可以修改这个请求返回的数据外,必要情况下还要修改请求。因为一个请求后面会带很多参数(譬如请求的时间,每次都不一样),即使同一个请求,但请求的 url 都不同,这样会导致匹配不到这个 url,所以前面修改的请求返回的数据也不生效。这时我们只需要请求匹配前面一部分就行了。
我们看下这个请求,我们仅仅需要问号前面的 url 匹配的话,就将该请求返回的结果替换成 a.json。
那么我们直接修改该 url,将 Extract 替换成 regex,然后将问号后面全删掉,替换成 .* 即可。然后点击 Test...
来测试修改后的 url 能否匹配到原始的 url。
这样,只要 url 前面匹配的话就直接将返回数据替换成 a.json。