Fiddler是一款免费强大的抓包工具,有了它可以抓取我们在网上的一些请求数据,除了PC端之外,手机也可以使用它来抓包。

它以web代理服务器的形式工作,当我们发送了一个请求到服务器,会先被fiddler拦截,我们可以篡改这个请求再将其发送给服务端,当然也可以篡改返回的结果,如果你熟悉Spring中的切面,那么你可以将fiddler认为是一个环形切面。

开始

点击File->Capture Traffic就可以开始进行拦截各式各样的请求了:

拦截的请求
拦截的请求

解决什么问题

介绍一个工具那么我们最关心的肯定是它能干什么?

修改请求以及响应内容

如果你正在开发一个web项目,假如你的接口查询依赖了你的另一个同事正在开发的内容作为你的一个查询条件,那么在有前端界面的情况下,你的想法是有没有办法mock掉你同事的接口,让他在前端展示一些假数据,然后你可以通过利用假数据进行组成一个查询条件进行你的接口的查询。

那么fiddler说不定就能帮你这个忙!

首先要知道fiddler默认不会拦截https的请求,所以你看到的https请求都会变成tunnel to

配置拦截HTTPS请求:

选择fiddler菜单Tools - Options - HTTPS,勾选“Capture HTTPS CONNECTS”“Decrypt HTTPS traffic”,选择“from all processes”

设置“Certificates generated by”“CertEnroll”,点击OK.

选择“yes”,”是“

勾选“Ignore server certificate errors(unsafe)

重启fiddler

拦截请求

点击下图的位置,原本是空白,点击后变成向上箭头加一个暂停键,代表拦截住发送的请求,再点一次变成向下的箭头加暂停键,代表拦截返回的结果。

拦截请求
拦截请求

有了以上的知识储备我们就可以做一件事,篡改请求。我们拦截某网站的https请求,第一次拦截会看到下图1的部分,点击上方的go放行,进入拦截https请求,也就是2部分。

拦截示例
拦截示例

现在我们尝试修改请求

修改请求
修改请求

先把其他请求通过Run to Completion先把它们执行掉,这里我们是一个POST请求,在Inspectors-Raw里看到了请求内容,直接修改product的值以及channel,执行Run to Completion。然后这时候就会得到我们用篡改后的请求查询出来的结果,很显然这个网站做了一些校验,我们得到了一串报错信息。

{
  "code" : "15001",
  "message" : "您无此操作权限",
  "errorReportStyle" : "dropDown"
}

同理我们可以拦击返回的请求

拦截返回结果
拦截返回结果

同样的先把其他请求通过Run to Completion执行掉,这里我们看到返回结果是经过压缩的所以需要先通过1处Transformer修改压缩方式,点击Chunked Transfer-Encoding,选择None,然后在右侧的Raw看到完整的返回结果如下,修改完毕后,需要把Transformer改回和原本一致再点击Run to Completion

修改返回结果
修改返回结果

有时候我们并不能满足于此,有没有办法不要这样每次请求都要改一次fiddler,我要他每次都能返回一个固定的结果呢?答案是有的!

自动响应

fiddler有个AutoResponese,可以允许你将请求内容放到一份文件里,然后每次请求过来都会读取文件的内容进行响应!

自动响应
自动响应

如上图,新增一个匹配规则,fiddler已经预设了几个规则,你可以自定义自己的规则,比如EXACT:开头就是精确匹配,REGEX:开头就是正则匹配,具体语法可以上官网摸索:https://docs.telerik.com/fiddler/knowledgebase/autoresponder

这里的例子我弄了个正则匹配这段URL,第二个框框是设置响应内容,同样fiddler也预设一些常用的返回结果,你也可以指定从文件读取,最后一个Find a file...,例子选择从文件导入响应内容。

过滤请求

fiddler拦截会拦截所有的请求,那么一打开可能就是一大串的请求涌进来,十分影响我们找请求。

过滤
过滤

点到Filter,勾选Use Filters

Hosts:

下拉框1:
  • No Zone Filter :不通过空间过滤,区分内外网
  • show only Intranet Hosts: 只显示内网(局域网)主机
  • show only internet Hosts:只显示互联网主机
下拉框2:
  • No Host Filter :不通过主机名进行过滤
  • Hide the following Hosts:隐藏下边输入的域名的会话
  • show only the following Hosts:只显示下边输入的域名的会话
  • flag the following Hosts:标记下边输入的域名相关的会话,会有加粗效果
输入框

可以输入正则域名,指定域名,分号分割

有了这个就可以过滤出指定的域名下的请求,当然过滤条件还有很多,下面的Client Process,Request Header,一般过滤域名就够用了。

点击4处的Actions ,选择Run Filterset now ,马上执行。

结语

fiddler能做的还不止这些,只是在工作中常用的功能介绍,如果后续还有更多进阶使用再做补充。