blog/docs/other/tools/fiddler.md

31 KiB
Raw Blame History

title date tags categories author
Fiddler工具使用 2020-06-27 21:20:59
Fiddler
工具
Fiddler
上海悠悠

原文转载至:上海悠悠

抓firefox上https请求

前言

fiddler是一个很好的抓包工具默认是抓http请求的对于pc上的https请求会提示网页不安全

这时候需要在浏览器上安装证书。

网页不安全

  1. 用fiddler抓包时候打开百度网页https://www.baidu.com

  2. 提示:网页不安全

fiddler设置

  1. 打开菜单栏Tools>Fiddler Options>HTTPS

  2. 勾选Decrypt HTTPS traffic里面的两个子菜单也一起勾选了

导出证书

  1. 点右上角Actions按钮

  2. 选第二个选项导出到桌面此时桌面上会多一个文件FiddlerRoot.cer,如左侧图。

导入到firefox浏览器

  1. 打开右上角浏览器设置->选项->高级->证书->查看证书->证书机构->导入

  1. 勾选文件到入

3.打开文件后,会弹出个框,勾选三个选项就完成操作啦。

如果还不能成功,那就重启浏览器,重启电脑了。

只抓APP的请求

前言

fiddler抓手机app的请求估计大部分都会但是如何只抓来自app的请求呢

把来自pc的请求过滤掉因为请求太多这样会找不到重要的信息了。

环境准备:

  1. 电脑上已装fiddler

  2. 手机和电脑在同一局域网

设置

  1. fiddler>Tools>Fiddler Options>Connections 勾选Allow remote computers to connect。

  2. 记住这里的端口号8888后面会用到。

查看电脑IP

1.打开cmd输入ipconfig,记住这个IPv4地址。

ipconfig

设置代理

  1. 手机设置->WLAN设置->选择该wifi点右边的箭头有的手机是长按弹出选项框

  1. 选择修改网络配置:

配置主机名与主机电脑IP地址保持一致

端口号8888

  1. 保存后就可以抓到来自手机的请求了。

抓APP上的HTTPS请求

  1. 如果app都是http请求是不需要安装证书能直接抓到的如果是https请求这时候手机就需要下载证书了。

  2. 打开手机浏览器输入:http://10.224.xx.xx:8888 这个中间的host地址就是前面查到的本机地址。

  3. 出现如下画面,点箭头所指的位置,点击安装就可以了。

设置过滤

  1. 手机上设置代理后这时候fiddler上抓到的是pc和app所有的请求如果pc上打开网址会很多这时候就需要开启过滤功能了。

  2. 打开fiddler>Tools>Fiddler Options>HTTPS>...from remote clients only,勾选这个选项就可以了

  • ...from all processes :抓所有的请求

  • ...from browsers only :只抓浏览器的请求

  • ...from non-browsers only :只抓非浏览器的请求

  • ...from remote clients only:只抓远程客户端请求

注意:如果手机设置代理后,测玩之后记得恢复原样,要不然手机无法正常上网。

查看get与post请求

前言

前面两篇关于Fiddler抓包的一些基本配置配置完之后就可以抓到我们想要的数据了接下来就是如何去分析这些数据。

本篇以博客园的请求为例简单分析get与post数据有何不一样以后也能分辨出哪些是get哪些是post了。

get请求

  1. 打开fiddler工具然后浏览器输入博客首页地址http://www.cnblogs.com/yoyoketang/

  2. 点开右侧Inspectors下的Headers区域查看Request Headers

  3. Request Headers区域里面的就是请求头信息可以看到打开博客园首页的是get请求

post请求

  1. 打开登录首页:https://passport.cnblogs.com/user/signin

  2. 输入账号和密码登录成功后查看fiddler抓包的请求头信息可以看出是post请求

如何找出需要的请求

  1. 打开fiddler后左边会话框区域刷刷刷的很多请求那么如何有效的找出自己需要的请求呢

  2. 首先第一步清屏cls,在左下角命令行输入cls清空屏幕

  1. 第二步在浏览器输入url地址的时候记住这个地址如打开博客首页http://www.cnblogs.com/yoyoketang/

在点击登录按钮的时候不要做多与的操作了然后查看fiddler会话框这时候有好几个请求。

  1. 如上图红色框框这个地方就是host地址红色圈圈地方就是url的路径yoyoketang也就是博客首页的地址了那这个请求就是博客首页的请求了。

get和post请求参数区别

  1. 关于get和post的功能上区别就不说了大家自己查资料这里主要从fiddler抓包的层面查看请求参数上的区别

  2. get请求的Raw参数查看主要分三部分

  • 第1部分是请求url地址

  • 第2部分是host地址

  • 第3部分是请求头部信息header

  1. 再查看博客登录请求的Raw信息post的信息分四部分。
  • 前面3块内容都一样第3部分和第4部分中间会空一行

  • 第4部分内容就是post请求的请求bodyget请求是没body的

工具介绍request和response

前言

本篇简单的介绍下fiddler界面的几块区域以及各自区域到底是干什么用的以便于各好的掌握这个工具

工具简介

  1. 第一块区域是设置菜单这个前面2篇都有介绍

  2. 第二块区域是一些快捷菜单,可以点下快捷功能键

  3. 第三块左边是抓捕的请求会话列表,每一个请求就是一个会话

  4. 第四块右边上方区域是request请求的详细信息可以查看headerd、cookies、raw、json等

  5. 第五块右边下方区域就是response信息可以查看服务端返回的json数据或其它信息

  6. 第六块区域左下角黑色的那块小地方虽然很不起眼容易被忽略掉这地方是命令行模式可以输入简单的指令如cls执行清屏的作用等

会话框

1.会话框主要查看请求的一些请求的一些基本信息,如#、result、protocol、host、url、body、 caching、content-type、process

  1. 、#:会话框列表最左侧,#号这一栏是代表这个请求大概是什么内容,<>这个符号就是我们一般要测试的请求与响应的类型。

  2. result:这里是服务器返回的代码,如

  • 200请求ok;2xx一般是服务器接受成功了并处理

  • 3xx重定向相关

  • 4xx,404最常见的的就是找不到服务器,一般是请求地址有问题

  • 5xx,这个一般是服务器本身的错误

  1. protocol这个是协议类型如http、https

  2. host主机地址或域名

  3. url:请求的路径

  4. body该条请求产生的数据大小

  5. caching缓存相关

  6. content-type连接类型

  7. process:客户端类型

Request 和Response

1.Request是客户端发出去的数据Response是服务端返回过来的数据这两块区域功能差不多

  1. headers:请求头这里包含client、cookies、transport等

  2. webfroms请求参数信息表格展示更直观。可以直接该区域的参数

  3. Auth:授权相关,如果现实如下两行,说明不需要授权

No Proxy-Authorization Header is present.

No Authorization Header is present.

  1. cookies:查看cookie详情

  2. raw:查看一个完整请求的内容,可以直接复制

  3. json:查看json数据

  4. xml:查看xml文件的信息

decode解码

  1. 如果response的TextView区域出现乱码情况可以直接点下方黄色区域解码

  1. 也可以选中上方快捷菜单decode这样后面的请求都会自动解码了

接口测试Composer

前言

Fiddler最大的优势在于抓包我们大部分使用的功能也在抓包的功能上fiddler做接口测试也是非常方便的。

对应没有接口测试文档的时候可以直接抓完包后copy请求参数修改下就可以了。

Composer简介

点开右侧Composer区域可以看到如下界面就是测试接口的界面了

  1. 请求方式点开可以勾选请求协议是get、post等

  2. url地址栏输入请求的url地址

  3. 请求头:第三块区域可以输入请求头信息

  4. 请求bodypost请求在此区域输入body信息

  5. 执行Execute按钮点击后就可以执行请求了

  6. http版本可以勾选http版本

  7. 请求历史执行完成后会在右侧History区域生成历史记录

模拟get请求

  1. 在Composer区域地址栏输入博客首页http://www.cnblogs.com/yoyoketang/

  2. 选择get请求点Execute执行请求就可以发送成功啦

  3. 请求发送成功后,左边会话框会生成一个会话记录,可以查看抓包详情

  4. 右侧history区域会多一个历史请求记录

  1. 会话框选中该记录,查看测试结果:
  • 选中该会话点开Inspectors

  • response区域点开Raw区域

  • Raw查看的是HTML源码的数据

  • 也可以点WebView查看返回的web页面数据

Json数据

  1. 有些post的请求参数和返回参数是Json格式的如博客园的登录请求https://passport.cnblogs.com/user/signin

  2. 查看json数据如下图

模拟post请求

  1. 请求类型勾选post

  2. url地址栏输入对应的请求地址

  3. body区域写登录的json参数

  4. header请求头区域可以把前面抓包的数据copy过来

(注意,有些请求如果请求头为空的话,会请求失败的)

  1. 执行成功后查看测试结果:
  • 执行成功如第三所示的图显示success=True

  • 执行失败如下图所示,显示

message=Invalid length for a Base-64 char array or string.

success=False

get请求url详解

前言

上一篇介绍了Composer的功能可以模拟get和post请求get请求有些是不带参数的这种比较容易直接放到url地址栏就行。有些get请求会带有参数本篇详细介绍url地址格式。

url详解

  1. url就是我们平常打开百度在地址栏输入的https:www.baidu.com,如下图这个是最简单的url地址打开的是百度的主页

  1. 再看一个稍微复杂一点的url在百度输入框输入上海悠悠博客园

  1. 查看url地址栏对比之前的百度首页url地址后面多了很多参数。当然最主要的参数是:wd=上海悠悠博客园(后面的一大串可以暂时忽略)。

  2. 那么问题来了,这些参数有什么作用呢?

可以做个简单的对比,在地址栏分别输入:

https:www.baidu.com

https://www.baidu.com/s?wd=上海悠悠博客园

对比打开的页面有什么不一样,现在知道作用了吧,也就是说这个多的"/swd=上海悠悠博客园"就是搜索的结果页面

url解析

  1. 以"https://www.baidu.com/s?wd=上海悠悠博客园"这个url请求的抓包为例

2.那么一个完整的url地址基本格式如下

https://host:port/path?xxx=aaa&ooo=bbb

  • http/https这个是协议类型如图中1所示

  • host:服务器的IP地址或者域名如图中2所示

  • port:HTTP服务器的默认端口是80这种情况下端口号可以省略。

如果使用了别的端口必须指明例如192.168.3.111:8080这里的8080就是端口

  • path:访问资源的路径,如图中3所示/s (图中3是把path和请求参数放一起了)

  • :url里面的这个符号是个分割线用来区分问号前面的是path问号后面的是参数

  • url-params:问号后面的是请求参数格式xxx=aaa如图4区域就是请求参数

  • &:多个参数用&符号连接

请求参数params

  1. 在url里面请求参数一般叫params但是我们在fiddler抓包工具看到的参数是QueryString

  2. QueryString是像服务端提交的参数其实跟params是一个意思每个参数对应的都有name和value值

  3. 多个参数情况如下

UrlEncode编码

  1. 如果url地址的参数带有中文的一般在url里面会是这样的如第二点里的wd=%E4%B8%8A%E6%B5%B7%E6%...

像看到%E4这种编码的就是经过url编码过的需要解码就能看到是什么中文了

  1. 用urlencode在线编码/解码工具,地址:http://tool.chinaz.com/tools/urlencode.aspx

post请求json

前言

上一篇讲过get请求的参数都在url里post的请求相对于get请求多了个body部分本篇就详细讲解下body部分参数的几种形式。

body数据类型

常见的post提交数据类型有四种

  1. 第一种application/json这是最常见的json格式也是非常友好的深受小伙伴喜欢的一种如下
{"input1":"xxx","input2":"ooo","remember":false}

2.第二种application/x-www-form-urlencoded浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数

input1=xxx&input2=ooo&remember=false

3.第三种multipart/form-data:这一种是表单格式的,数据类型如下

------WebKitFormBoundaryrGKCBY7qhFd3TrwA

Content-Disposition: form-data; name="text"

title

------WebKitFormBoundaryrGKCBY7qhFd3TrwA

Content-Disposition: form-data; name="file"; filename="chrome.png"

Content-Type: image/png

PNG ... content of chrome.png ...

------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

4.第四种text/xml:这种直接传的xml格式

<!--?xml version="1.0"?-->

<methodcall>

<methodname>examples.getStateName</methodname>

<params>

<param>

<value><i4>41</i4></value>

</params>

</methodcall>

json格式

1.打开博客园的登录页面输入账号密码后抓包查看post提交数据点开Raw查看整个请求的原始数据

2.前面讲过post的请求多一个body部分上图红色区域就是博客园登录接口的body部分很明显这种格式是前面讲到的第一种json格式

3.查看json格式的树状结构更友好可以点开JSON菜单项

4.查看这里的json数据很明显传了三个参数

  • input1:这个是登录的账号参数(加密过)

  • input2:这个是登录的秘密参数(加密过)

  • remember:这个是登录页面的勾选是否记住密码的选项False是不记住True是记住

x-www-form-urlencoded

1.登录博客园后,打开新随笔,随便写一个标题和一个正文后保存,抓包数据如下

2.如上图的这种格式很明显就属于第二种了这种类型的数据查看在WebFrom里面查看了

3.上面红色框框的Query String是url里面的参数下面红色框框的body部分就是这次post提交的body参数部分了

WebFrom

1.为什么登录请求的WebFrom的body部分为空呢

2.看上图红色框框的显示这里只支持application/x-www-form-urlencoded这种格式的body参数也就是说json格式的需要在JOSN这一栏查看了

xml

1.如果遇到text/xml这种格式的body那就如下图这样的了

打断点bpu

前言

先给大家讲一则小故事在我们很小的时候是没有手机的那时候跟女神聊天都靠小纸条。某屌丝A男对隔壁小王的隔壁女神C倾慕已久于是天天小纸条骚扰无奈中间隔着一个小王这样小王就负责传小纸条了。有一天小王忍不住偷偷打开A男表白的纸条把里面内容改了下改成了我的同桌小王喜欢你。最后女神C和小王走在了一起。。。这是一个悲伤的故事

断点

1.为什么要打断点呢?

比如一个购买的金额输入框输入框前端做了限制100-1000那么我们测试的时候需要测试小于100的情况下。很显然前端只能输入大于100的。这是我们可以先抓到接口修改请求参数绕过前端传一个小于100的数检查服务端的功能是否OK。

也就是说接口测试其实是不需要管前端的主要测后端的功能。Fiddler作为代理服务器的作用其实就相当于上面故事里面的小王传纸条的作用Fiddler(小王修改了请求参数小纸条是为了验证服务端功能女神C

2.Fiddler可以修改以下请求

  • Fiddler设置断点可以修改HTTP请求头信息如修改CookieUser-Agent等

  • 可以修改请求数据突破表单限制提交任意数字如充值最大100,可以修改成10000

  • 拦截响应数据,修改响应体,如修改服务端返回的页面数据

断点的两种方式

1.before response这个是打在request请求的时候未到达服务器之前

  • 屌丝A传给小王的时候小王在这个时候拦截了小纸条未传给女神C

2.after response也就是服务器响应之后在Fiddler将响应传回给客户端之前。

  • 女神C回了小纸条小王拿到后拦截了未传给屌丝A

全局断点

1.全局断点就是中断fiddler捕获的所有请求先设置下点击rules-> automatic breakpoint ->before requests

2.选中before requests选项后打开博客园首页http://www.cnblogs.com/yoyoketang/看到如下T的标识说明断点成功

3.打完断点后会发现所有的请求都无法发出去了这时候点下Go按钮就能走下一步了

4.找到需要修改的请求后选中该条会话右侧打开WebFroms,这时候里面的参数都是可以修改的了

5.修改之后点Run to Completion就能提交了于是就成功修改了请求参数了

6.打全局断点的话是无法正常上网的需要清除断点rules-> automatic breakpoint ->disabled

单个断点

已经知道了某个接口的请求地址,这时候只需要针对这一条请求打断点调试,在命令行中输入指令就可以了

请求前断点before response) bpu

  1. 论坛登录接口:https://passport.cnblogs.com/user/signin

  2. 命令行输入bpu https://passport.cnblogs.com/user/signin 回车

3.请求登录接口的时候,就会只拦截登录这个接口了,此时可以修改任意请求参数

4.取消断点,在命令行输入: bpu 回车就可以了

响应后断点after requests bpafter

  1. 论坛登录接口:https://passport.cnblogs.com/user/signin

  2. 在命令行输入bpafter https://passport.cnblogs.com/user/signin 回车

3.登录博客园,会发现已经拦截到登录后服务器返回的数据了,此时可以修改任意返回数据

4.取消断点,在命令行输入: bpafter 回车就可以了

拦截来自某个网站所有请求

1.在命令行输入bpu www.cnblogs.com

2.打开博客园任意网页,发现都被拦截到了

3.打开博客园其他网站,其它网站可以正常请求

4.说明只拦截了来自部落论坛www.cnblogs.com的请求

5.清除输入bpu回车即可

命令行其它相关指令

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请求。

更多的其他命令可以参考Fiddler官网手册

(赠言:打断点仅供测试需要,勿走歪门邪道!!!)

保存会话save

前言

为什么要保存会话呢举个很简单的场景你在上海测试某个功能接口的时候发现了一个BUG而开发这个接口的开发人员是北京的一家合作公司。你这时候给对方开发提bug

如何显得专业一点能让对方心服口服的接受这个BUG呢如果只是截图的话不是很方便因为要截好几个地方还描述不清楚不如简单粗暴一点把整个会话保存起来发给对方。

保存为文本

1.以博客园登录为例,抓到登录的请求会话

2.点左上角File>Save>Selected Sessions>as Text保存到电脑上就是文本格式的

3.文本格式的可以直接打开,结果如下图

几种保存方式

1.save-All Sessions :保存所有的会话saz文件

2.save-Selected Session:保存选中的会话

  • in ArchiveZIP 保存为saz文件

  • as Text 以txt文件形式保存整个会话包括Request和Response

  • as Text (Headers only) :仅保存头部

3.Request保存请求

  • Entir Request:保存整个请求信息headers和body

  • Request Body:只保存请求body部分

4.Response保存返回

  • Entir Response:保存整个返回信息headers和body

  • Response Body:只保存返回body部分

  • and Open as Local File保存Response信息并打开文件

乱码问题decode

1.打开博客园首页:http://www.cnblogs.com/yoyoketang/,保存之后查看,会发现返回的是乱码

2.遇到这种情况主要是需要解码用前面学到的decode方法

3.点击箭头区域后,重新保存就没乱码了。

4.还有一个最简单办法就是选中上图会话框上的decode按钮这样就自动解码了。

保存与导入全部会话

1.我们可以打开fiddler操作完博客园后选中save>All Sessions,保存全部会话

2.保存后在fiddler打开也很方便直接把刚才保存的会话按住拽进来就可以了

3.也可以选择File>Load Archive导入这个文件

Repaly

1.导入请求后可以选中某个请求点击Repaly按钮重新发请求

2.也可以ctrl+all全部选中后点Repaly按钮一次性批量请求

这里保存会话和replay功能其实就是相当于录制和回放了

会话框添加查看get与post请求类型

前言

在使用fiddler抓包的时候查看请求类型get和post每次只有点开该请求在Inspectors才能查看get和post请求不太方便。于是可以在会话框直接添加请求方式。

添加会话框菜单

1.点会话框菜单(箭头位置),右键弹出选项菜单

2.选择Customize columns选项Collection选项选择Miscellaneous

3.Field Name选择RequestMethod

4.点Add按钮即可添加成功

隐藏会话菜单

1.选择需要隐藏的菜单右键。选择Hide this column

2.隐藏后也可以让隐藏的菜单显示出来Ensure all columns are visble

调整会话框菜单顺序

1.如果需要调整会话框菜单顺序Content-Type菜单按住后往前移动就能调整了

会话排序

1.点击会话框上的菜单就能对会话列表排序了如点body菜单

2.点完后上面有个上箭头正序或者下箭头倒叙。但是不能取消取消的话关掉fiddler后重新打开就行了

HTTPS证书Actions无法导出问题

前言

在点Actions时候出现Export Failed:The root certificate could not be located.最近有很多小伙伴在fiddler导出证书的时候遇到无法导出的问题收集了几种解决办法供参考。

证书无法导出

1.在点Actions时候出现Export Failed:The root certificate could not be located.

无法导出问题解决方案

1.首先确保安装的 Fiddler 是较新的版本先关闭fiddler

2.下载并安装Fiddler证书生成器

下载地址:http://www.telerik.com/docs/default-source/https://limeng-blog.oss-cn-hangzhou.aliyuncs.com/fiddler/addons/fiddlercertmaker.exe?sfvrsn=2

3.点Tools>Fiddler Options

4.勾选Capture HTTPS traffic

5.点Actions按钮Export Root Certificate Desktop按钮导出到桌面

删除证书

1.有些小伙伴可能之前装过一些fiddler证书安装的姿势不对导致新的证书不起作用这时候需要先删掉之前的证书了

方法一从fiddler里打开证书管理界面

方法二、从文件管理器输入certmgr.msc并回车

2.搜索之前安装的fiddler证书找到之后全部删除

3.重新下载证书生成器:http://www.telerik.com/docs/default-source/https://limeng-blog.oss-cn-hangzhou.aliyuncs.com/fiddler/addons/fiddlercertmaker.exe?sfvrsn=2

一路傻瓜式安装,遇到警告什么的直接忽略就行。

4.安装好证书后安装1.1章节Fiddler抓包1-抓firefox上https请求的浏览器导入证书就行了弄好之后重启电脑就OK了

AutoResponder返回本地数据mock

前言

mock可以说是面试必问的话题的我第一次接触mock的时候也是一脸懵逼。虽然fiddler工具用了很久里面的打断点设置自动返回数据功能都用过。
mock说的通俗一点就是模拟返回数据只是面试官为了装逼搞的这么专业。模拟返回数据用fiddler打断点修改返回数据和设置AutoResponder都能实现

AutoResponder

使用AutoResponder修改返回的数据并保存让接口返回修改后的数据

访问在线地址:https://www.cnblogs.com/yoyoketang/ 使用fiddler抓包 从会话框找到抓到的数据拽到AutoResponder页面

右键编辑返回的内容

点开raw,修改返回的body内容修改完成后点save保存

接下来勾选Enable rules 和勾选需要设置的接口,重新打开浏览器就可以看到内容被修改了

勾选Enable rules的同时最好也同时勾上Unmatched requests passthrougth,这个选项是不匹配的全部放行

Add Rule

如果我们想让请求一个接口地址的时候返回json数据在这里添加Add Rule也是可以实现的 点开Rule Editor 第二个输入框选最后一项“Find a file”, 找到本地json文件后右下角Save保存

json文件内容如下

{"error_code": 0,
"reason": "success",
"result": {
    "data": {
          "conclusion": "[大吉+官运+财运+才艺]如龙得云,青云直上,智 谋奋进,才略奏功",
          "analysis": "欲望难足希望高,计谋成功财力豪,猜疑嫉妒性自 改,如龙乘云势运开。"

          }
          }
}

接下来在浏览器输入:https://www.baidu.com/ 就会出现刚才设置的json内容

设置返回本地的html文件也是一样的操作

设置地址跳转

当访问一个外网地址的时候,如何跳转到本地的连接呢?在这里也可以设置规则跳转 如下图设置规则,访问https://www.sina.com.cn/时跳转到访问本地的jenkins地址http://localhost:8080/login

模拟状态码

AutoResponder里面还可以模拟状态码比如302 401 502这种

重新访问https://www.sina.com.cn/就会弹出401的认证框

还可以模拟网络延迟*delay:100