Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,Fiddler包含了一个强大的基于事件脚本的子系统,并且能使用.net语言进行扩展。你对HTTP 协议越了解, 你就能越掌握Fiddler的使用方法。你越使用Fiddler,就越能帮助你了解HTTP协议。Fiddler无论对开发人员或者测试人员来说,都是非常有用的工具。
1 为什么要用抓包工具?什么时候会选择抓包?
抓包工具可以协助测试与开发人员去定位问题,从而减轻工作量,节约时间成本
1、 不知道接口的请情况下
答:抓包可以获取url,请求方式,请求参数和相应值
2、 抓包还可以定位问题
答:我们可以查看此接口的参数和返回值。若参数传错,bug提个前端;若响应异常,没有调通后台接口;若有响应,响应值错误,bug提给后端
3、 查看接口的安全性
支付订单的时候,fiddler请求前断点,修改5000元为50元,造成数据串改,不安全。用户登录的时候,截取接口查看入参,可以看到具体的用户名、密码,不安全。所以通过fiddler或者F12可以查看接口安全性,做到把敏感数字**显示更安全。
2 了解的都有那些抓包工具?这些工具有那些优缺点?哪个更适合我们使用?
1、 Fiddler抓包工具,是客户端和服务端的http代理,客户端所有的请求都要先经过fiddler,到响应的服务端,然后端返回的所有数据也都要经过fiddler,Fiedler我们可以用来抓包,修改请求,响应参数,弱网测试等fiddler也是我们最常用的抓包工具之一
2、 Charles(花瓶)抓包工具也是比较常用的,和fiddler差不多,请求接口和返回数据的显示方式不一样,Charles是树状结构比较清晰,fiddler是按照时间倒叙排的
3、 Jmeter工具,jmeter也是可以进行抓包的,除了抓包,接口测试,性能测试也都不在话下,使用jmeter之前需要安装jdk
我不常用:
4、 Firebug抓包工具是浏览器firefox浏览器自带插件,支持很多种浏览器,直接按f12,和chrome与ie中自带的F12一样的,用起来比较方便
5、 Httpwatch抓包工具是强大的网页数据分析工具,安装简单,不需要设置代理和证书,但只能看不能修改,,集成在Internet Explorer工具栏
Fiddler安装与使用(以安卓模拟器为例)
如果利用Fiddler和安卓模拟器抓https包,步骤一共五大步: (手机直接抓包只需要1、4步骤)
1.配置fiddler
2.安装模拟器
3.配置模拟器的代理
4.下载安装fiddler证书
5.如果有特殊要求,需要开发打包
一:配置fiddler
> fiddler ----> Tools -----> Fiddler Options
在【Connection】面板里将Allow remote computers to connect勾选,设置端口号【默认为8888,可修改其他端口号】;点击【OK】按钮,关闭Fiddler并重新打开Fiddler
fiddler设置监听端口号,必须重启fiddler才能生效
在 HTTPS 面板里勾选CaptureHTTPS CONNECTs,点击Actions,勾选Decrypt HTTPS traffic和Ignore servercertificate errors两项,点击OK(首次点击会弹出是否信任fiddler证书和安全提示,直接点击yes就行)
二 安装模拟器:
~~安装逍遥模拟器或雷电模拟器(某些模拟器不支持代理),其他略~~
三 配置模拟器:
(正常来说无需开启VT设置)
逍遥模拟器: 找到模拟器中 ----- 设置 ----> WLAN打开如下页面
左键长按 [MEmuWiFi] 会弹出如下选项
点击 修改网络
雷电模拟器: 默认网络为打开状态。 若打开模拟器后,右上角无wifi图标显示,可设置打开。(打开后可能需要重启)
鼠标移到这里再放开,点击wifi图标
四:下载安装fiddler证书
完成后进入模拟器,打开浏览器(整个设置中必须保证fiddler一直打开)
浏览器中输入http://ip:端口号(ip为安装fiddler的主机ip,端口为fiddler设置时的端口)
然后会跳转到证书下载页
点击下载之后,安装证书并起个名字,随便写就行,点击确定
要求设置一个手机密码,自己设置一个,记住你的密码,下一次打开会让输入的,否则打不开模拟界面
安装成功后,此时在模拟器中操作即可在fiddler中抓取到对应的http和https的包
测试:模拟器的浏览器输入 https://www.taobao.com
fiddler抓包:
环境配置:使用fiddler工具抓请求,解决https抓不到的问题
fiddler全局认识
– 利用fiddler在PC端抓包的设置与安卓端类似。
–利用fiddler在真实手机抓包:
wifi:装了fiddler的电脑与手机为同一网域
a、在wifi里绑定代理
b、绑完代理后下载证书,在手机自带浏览器里输入 10.107.123.1:8888(自己电脑的IP:8888),点击最后一个标红的链接进行下载(正常的情况下)
如果在下载证书的时候遇到下图的异常情况,点击查看“显示详细信息”,点击“访问此网站”忽略这个安全提醒,继续访问 安装证书
c、下载后设置里进行信任证书(ios需要在下图里2个地方进行信任,安卓手机下载后就去安装,基本不会有多余的操作)
d、信任后证书后,扫码安装app, 启动app,如果ios手机出现下图情况,这个是app验证,你关掉wifi使用移动网络,点击启动app,一次不行点击2次,可以进入app后,再使用WIFI,
也可以通过关闭绑定的代理,启动app验证,验证通过后,再绑定代理,(为了方便选择第一种方法吧)
e、再次使用wifi后,启动app, 登录账号如果不能登录,大概率是环境还没有切换过来,这时你可以选择休息一会,然后杀掉进程再重新启动app
f、到这里,绑定了代理,下载了证书,确保是测试环境、账号和密码正确(回归环境)就100%可以登录了
再次附上关闭代理操作,如图
再次叮嘱:如果换个人提供环境,拿到别人的代理ip和端口,需要安照步骤3再来一遍
抓包:
(1)查看HTTPS对应的接口、与页面的对应
以统一工作平台APP为例:注意staging环境
比如可以抓到验证码:
双击url,Json格式可以看到该url对应哪个接口:
(2)mock返回
mock某个字段:(修改response数据)
先双击,要想修改,右面的黄条条一定要点掉的:
然后把链接拉到AutoResponder,删掉前缀 Method:POST EXACT
一般勾前三个或全勾:
右键–Edit response,可以 修改。save后:刷新想要mock的页面查看:
和这样做一样:
----修改response数据,不打断点:
选中序号16记录,右击-勾选“Unlock fo Editing”
选择Fiddler右侧reponse块下的TextView,这里修改title,如图:
去掉“Unlock for Editing”------ 再选择右侧上方的AutoResponder,勾选下方的checkbox选框,并将序号16托到下方—注意:直接拖,可以不用删掉url的前缀 Method:POST EXACT:
回到浏览器,刷新页面,如图,标题变为上面改的内容
(3)打断点 / 修改 response 数据
—图标:直接点左下方这个位置:
已经知道了某个接口的请求地址,这时候只需要针对这一条请求打断点调试
bpu url
取消断点,在命令行输入: bpu 回车就可以了( 或者打空格再回车应该也可以?)
----全局断点(并修改 response 数据):请求前打断点–得一个一个run,点击Go按钮走下一步:(清除断点:disabled)
----步骤:
点击菜单栏按钮【Rules】—【automatic Breakpoints】-【After Response】
在TextView改数据:
改动的时候Transformer的选项是None(只读时 Chunked Transfer-Encoding 是打钩的)
改完 Go 运行,刷新页面,数据就被改了
----可以mock为这些HTTP类型,
可以选择js文件(如果检验不到内容也会报错,页面502之类的)
-----mock request
方法1:打断点
刷新页面调该接口,和上面response差不多,可以修改入参,然后run它
断点完记得释放:bpu 空格
方法2:
application/x-www-form-urlencoded 与 multipart/form-data 的区别
UrlRequest中的contentType默认值为 application/x-www-form-urlencoded。它是默认的内容编码类型,一般可以用于所有的情况,但是在传输比较大的二进制或者文本数据时效率极低。
而对于 FileReference.upload() 请求的内容类型,将自动设置为 multipart/form-data 并忽略 contentType 属性的值。可以用来上传文件或者二进制数据和非ASCII数据。
(4)过滤
只看一个接口———过滤host(封号分隔)、 过滤url(空格分隔):
(5)插件–方便查看脚本–:如查看IP、高亮等----https://blog.csdn.net/amrenyu/article/details/80745674
方式一:通过【Rules】->【Customize Rules】 打开Fiddler ScriptEditor https://cloud.tencent.com/developer/news/270957
快捷键:Ctrl+R
方式二:通过右侧菜单“FiddlerScript”Tab页进入FiddlerScript编辑器
高亮:https://www.cnblogs.com/pachongshangdexuebi/p/6589899.html
IP:找到main()方法,在里面添加如下代码。
FiddlerObject.UI.lvSessions.AddBoundColumn(“Server”,50,"@response.server");
FiddlerObject.UI.lvSessions.AddBoundColumn(“HostIP”,50,“x-hostIP”);
(6)查看接口–my
(7)安装Fiddler后浏览器请求被拦截无法上网问题
图一:勾选可对APP抓包,但不能上外网;
图二:不勾选则反;
图三:简便方法–左下角capturing–抓包,不capturing–不抓包
(8)关于抓包的一些问题
----先看PC端fiddler的如上设置,是否可以正常抓包
----查看手机代理是否正确:IP && 端口(如果8888端口冲突也可以尝试换一下端口号)
----注意SwitchHosts环境:测试环境-----这里注意IP不正确时会报503错误(下图)----可能最多的情况是,后端修改了IP地址但本地host没有刷新导致连接不到服务器,这种情况APP或网址都打不开或者登录不了
----IOS设备往往需要查看证书 && 软件是否验证 (测APP步骤)
----如果只能抓HTTP的包,不能抓HTTPS:需要删除all证书(本机fiddler根目录的 certmgr.msc + fiddler的)百度…(删除证书时的目录:D:\Users\jayla.wu\AppData\Roaming\Microsoft\Crypto\RSA)
可能需要下载 fiddlercertmaker.exe / FiddlerCertMaker (1).exe
可能需要删了fiddler重装:FiddlerSetup_5.0.20204.45441.exe
fiddler官网有:https://www.telerik.com/fiddler/add-ons
(9)fiddler抓包 443 请求不到数据 ---- https://www.cnblogs.com/linyufeng/p/13689395.html
var hosts = 'zkd.me develop.dog';
FiddlerApplication.Log.LogFormat("Logger session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
if (hosts.indexOf(oSession.host) > -1) {
FiddlerApplication.Log.LogFormat("Capture session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
if (oSession.HTTPMethodIs('CONNECT')) {
FiddlerApplication.Log.LogString('create fake tunnel response');
oSession['x-replywithtunnel'] = 'FakeTunnel';
return;
}
if (oSession.isHTTPS) {
FiddlerApplication.Log.LogString('switch https to http request');
oSession.fullUrl = oSession.fullUrl.Replace("https://", "http://");
oSession.port = 80;
}
FiddlerApplication.Log.LogFormat("Processed session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
}
FiddlerApplication.Log.LogFormat("Logger session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
(10)fiddler抓PC的包
fiddler在https–options设置里,把证书导出来,浏览器添加该证书。
这样会使PC要想打开页面必须先打开fiddler。
(11)charles
与 IP:8888 意思相同,手机安装证书需要先和Charles设置的IP和端口一致,连代理后,手机端输入chls.pro/ssl
该步骤来源:https://www.jianshu.com/p/551711c121f0
Charles全教程:https://blog.csdn.net/u012486840/article/details/106593213?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.control