一、为什么要使用抓包工具?
1、看过太多测试同学,安卓端测试出现的问题,归属就是安卓端,ios端出现的问题归属就是ios端,这样子不仅bug被拒绝率很高,也不方便别人认可你的能力,使用简单的抓包工具,可以简单分析前后端问题:比如,前端传参是否正确;后台返回是否正常;不该调用接口的地方是否有调用;该调用的地方是否有调用;传参及参数的返回是否合规安全;等等吧,并不是说前端展示出来的文案,就是前端写的,也可能是后台接口返回后前端直接呈现的
2、协助做接口测试。没有接口文档的情况下,先抓包,再调用接口测试
3、协助做接口自动化测试。看下网站或app内真实的传参情况,模拟传参去做接口自动化测试
…
等等吧
二、fiddler的安装
下载并安装fiddler安装包,官方链接:https://www.telerik.com/fiddler
三、fiddler的配置-抓包准备阶段
3.1 证书配置,点击Tools->Options->HTTPS
打开Fiddler菜单项Tools->TelerikFiddler Options->HTTPS,
勾选CaptureHTTPS CONNECTs–捕获 HTTPS 连接,
勾选Decrypt HTTPS traffic和Ignore servercertificate errors两项–HTTPS 请求解密和忽略服务器端验证错误
,点击OK(首次点击会弹出是否信任fiddler证书和安全提示,直接点击yes就行)
当然抓取https是需要先安装并信任证书的
信任证书
设置端口号,并保存,重启fiddler
3.2 配置fiddler允许远程连接抓包
点击Tools->TelerikFiddler Options->Connections,勾选allow remote computers to connect–允许远程电脑连接,默认监听端口为8888,端口号也可以改成其他
3.3 移动端(手机或pad)代理设置
1、确保你连的wifi和你的电脑在同一局域网,手机点击:设置-WiFi-高级,代理选择手动,主机名就是fiddler的电脑ip地址,端口号,就是fiddler的端口号ttps://img-blog.csdnimg.cn/c96ed7aa6e5943b298e511d62d17595e.png)
2、打开手机浏览器,输入:ip:端口号,回车,浏览器会自动带上http://去请求,即:http://ip:端口号
ip 可以在这里看:
3、前往之后会跳转到证书下载页,点击FiddlerRootcertificate下载证书
4、点击下载之后,安装证书,证书名字最好不要写默认,预防其他人使用你手机会把你的证书覆盖
5、安卓端直接安装,ios端证书安装后需要信任证书:设置–通用–关于本机–证书信任设置–(对应证书的开关)
安卓7.0.0以上版本 证书不太好安装,可以参考一下方法:
方法一:
方法二:
使用wifi的高级设置进行安装。以华为EMUI8.0.0(Android8.0.0)为例:设置-》无线和网络-》WLAN-》更多-》高级WLAN设置-》安装证书。
以上总结:
四、fiddler主要功能的使用
4.1 Fiddler 抓包 显示server ip
显示出现serverIp方便看当前是否走到了测试环境,是否是开发部署的IP
1、快捷键Ctrl+R ,打开 Customize Rules.js文件, 或者在工具栏Rules–》Customize Rules…点击打开
2、查找static function Main() 这个函数,在FiddlerObject.StatusText = " CustomRules.js was loaded at: " + today; 这行下面新增一行:FiddlerObject.UI.lvSessions.AddBoundColumn(“ServerIP”, 120, “X-HostIP”);保存重启 Fiddler ,则fiddler可以看到server ip一栏
4.2 返回报文乱码处理
有时候我们看到Response中的HTML是乱码的, 这是因为HTML被压缩了, 我们可以通过两种方法去解压缩。
- 点击Response Raw上方的"Response is encoded any may need to be decoded before inspection. click here to transform"
- 选中工具栏中的"Decode"。 这样会自动解压缩
4.3 fiddler过滤域名
有时候我们只想抓取自己想要的请求
我们可以在Filers面板中勾选“Use Filters”
1.Hosts第一项默认“No zone filter”
2.Hosts第二项选择“Show Only The Following Hosts”只显示过滤到的域名,多个域名使用”;“分号分割
4.4 查看响应时间
在class Handlers 最前面(也可以其他位置,最前面仅仅是不容易被{}弄乱)添加以下代码:
// 显示每行请求的发起时间:时分秒毫秒
public static BindUIColumn("BeginTime", 80)
function BeginTimingCol(oS: Session){
return oS.Timers.ClientDoneRequest.ToString("HH:mm:ss.fff");
}
// 显示每行请求的响应时间:时分秒毫秒
public static BindUIColumn("EndTime", 80)
function EndTimingCol(oS: Session){
return oS.Timers.ServerDoneResponse.ToString("HH:mm:ss.fff");
}
// 显示每行请求的服务端耗时时间
public static BindUIColumn("Time Taken", 80)
function CalcTimingCol(oS: Session){
var sResult = "0";
if ((oS.Timers.ServerDoneResponse > oS.Timers.ClientDoneRequest)) {
sResult = (oS.Timers.ServerDoneResponse - oS.Timers.ClientDoneRequest).TotalMilliseconds.ToString("N0");
}
return sResult + "ms";
}
在保存该代码,重新打开fiddler,有请求后即可看到接口耗时,可以按自己的需求把此参数往前移动,移动到方便查看的地方
4.5 拦截修改返回,模拟http响应
1.打开Fiddler 找到AutoResponde
2.选择Enable rules 和Unmatched requests passthrough–求匹配不到的话,就会请求原地址,Enable Latenc可以设置延时
3.选中左侧的http请求,然后点击Add Rule
4.在下面的Rule Editor 下拉选择要模拟的响应类型,200、404、502等(也可以自己创建Response,选中Create New Response…,如果是要替换掉某些页面文件,选中Find a file). 最后点击Save 保存下。
基本规则:
前缀为“EXACT:”表示完全匹配(大小写敏感)
无前缀表示基本搜索,表示搜索到字符串就匹配
前缀为“NOT:”表示发现就不匹配
前缀为“REGEX:”表示使用正则表达式匹配
前缀为“REGEX:(?insx)”表示匹配方式其中:
i表示不区分大小写
n表示指定的唯一有效的捕获是显式命名或编号的形式
s表示单行模式
x表示空格说明的
举例:regex:.+getGeetestCaptcha.do*
拦截成功后的请求,接口会有颜色标识