HTTP分析调试工具Fiddler的使用

software

Fiddler是什么?

Fiddler是一个Web调试代理程序,HTTP抓包分析工具,使用它可以分析您的电脑应用和互联网之间的基于HTTP协议的通信数据。通过Fiddler作为中间代理,就可以按需求查看、分析、修改所有的HTTP请求和响应内容。

为什么在网络编程中需要用到Fiddler?

日常网站开发中,经常会使用HTTP协议来传输数据,请求数据报文通常由头部参数和用户提交的正文部分按封装协议约定的格式,在TCP连接建立后,发送给远端的服务器,服务器处理完毕把头部信息和处理结果再封装为协议定义的响应格式返回给客户端,实际开发中可能由于两端业务逻辑的复杂性,组装完毕准备传输的最终内容,往往是未知的,此时如果借助Fiddler代理来捕获请求,就可以非常清晰地查看传输内容,同时,Fiddler可以修改发送和接收的数据,方便程序的调试开发。

Fiddler系统代理示意图

与Fiddler功能相似的工具还有哪些?

目前常见的有Charles, Burp Suite, Wireshark, HTTPWatch , Tcpdump。

Fiddler的安装

对于操作系统Windows,Linux,MacOS,官方都有支持的版本可供下载。

下载地址:

https://www.telerik.com/download/fiddler

Fiddler配置步骤

1)Fiddler配置

打开Fiddler,点击菜单栏Tools->Options…打开选项菜单,切换到Connections选项卡。

在Fiddler listens on port:的文本框里面输入监听的端口号。

然后访问 http://127.0.0.1:8883/, 如果想监听其它机器而非本机,选择Allow remote computers to connect为打开状态。

如果正常打开并显示 Fiddler Echo Service 表明Fiddler监听已经正常工作了(打不开注意防火墙的限制)。

2)安装Chrome扩展程序 Proxy SwitchyOmega

安装这个Chrome浏览器的扩展程序,新建一个Fiddler端口的情景模式,就可以设定访问的页面通过Fiddler代理了。

Chrome浏览器扩展SwitchyOmega添加Fiddler情景模式
Chrome浏览器扩展SwitchyOmega添加Fiddler情景模式

配置完成后,点击地址栏后面的SwitchOmeage的插件图标,选择Fiddler就可以了。

3) 设定Fiddler捕获数据和过滤器

Fiddler监听过滤设置
Fiddler监听过滤设置

 

如果打开的网页比较多,网络比较繁忙,抓取的HTTP会话会很多,设定过滤器可以只捕获特定的会话。

上图中设定了只捕获www.baidu.com和*.one234.xyz两个域名的HTTP会话。

如果Fiddler还是没有捕获,则需要注意左下角的设置,打开Capturing和All Processes。

如果是Windows,需要注意防火墙的设置。

4 ) 程序中设置Fiddler代理

如果欲监听的HTTP请求是由程序发起,可以在代码中设置代理,例如

PHP程序关键代码片段:

curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);

curl_setopt($ch, CURLOPT_PROXY, ‘127.0.0.1:8883’);

Java程序关键代码片段:

jre -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888 MyApp

shell curl 命令使用Fiddler代理:

curl –proxy 192.168.199.117:8883 http://demo.one234.xyz/fiddler/fruit.html

5 ) HTTPS解析

依次打开Tools->options->HTTPS的选项卡,勾选相应的选项,如下图示例:

6 ) 手机配置代理

如果需要监听手机设备HTTP数据,在连接成功的Wi-Fi设置里面可以找到手动HTTP代理,设置代理主机名和端口:

Android HTTP设置代理图示:

iPhone HTTP代理设置图示:

想正常解析HTTPS,还需要安装一个Fiddler的插件CertMaker,来生成证书。

插件下载地址:https://telerik-fiddler.s3.amazonaws.com/fiddler/addons/fiddlercertmaker.exe

安装完毕重新启动Fiddler,然后用手机访问http://127.0.0.1:8883,注意127.0.0.1切换为安装了Fiddler的主机的IP

在页面点击FiddlerRoot Certificate下载证书后安装。

 查看HTTP会话

配置成功后,就可以在Fiddler的界面看到抓取到的HTTP会话了,如下图:

Fiddler抓取的HTTP会话列表
Fiddler抓取的HTTP会话列表

 

点击左侧每一条会话,就可以在右侧查看会话的所有信息,包括统计信息,会话请求和响应的数据报头和报体,使用的HTTP协议版本,Cookies等,以及使用表单,进制转化,JSON格式化等对数据报的解析查看。

HTTP会话数据报分析
HTTP会话数据报分析

在这里我们可以看到程序发给服务器的原始数据,和服务器处理后返回的原始结果。这样的分析有助于排查问题来源于客户端还是服务端。

自定义HTTP会话

1)自定义HTTP请求[Request]

自定义HTTP会话是指,可以通过Fiddler发起HTTP请求,下图是主动发起请求的例子:

Fiddler自定义HTTP请求
Fiddler自定义HTTP请求

在这里,可以脱离浏览器主动发起HTTP请求,也可以把左侧的会话拖到右侧,然后在原来会话的基础上修改,(在左侧会话上点击右键,选择Replay->Reissue and Edit也可以编辑会话)这样就不依赖应用程序了。可以修改上次发起的请求数据,也就说可以完全绕开代码程序的限制,比如网页上的Javascript校验,复杂的表单构造,数据准备依赖,在实际程序开发测试中,可以忽略繁琐的请求数据构造,大大提高效率。

2)自定义HTTP响应[Response]

Fiddler自定义HTTP响应
Fiddler自定义HTTP响应

如上图所示,使用AtuoResponder可以自定义每一次会话请求的响应内容,这样,有些请求就不需要发送到远端服务器去处理,直接在本地,按预定的格式返回。比如远程服务器响应太慢,边界条件无法满足,线上生产环境无法返回满足特定条件的数据,需要权限认证等。自定义响应的内容可以指定为一个本地文件,或者设定的HTTP状态码等等。同样对于开发和测试人员,只要掌握使用技巧,可以避免很多因素导致的响应问题。

想基于左侧的捕获的HTTP会话创建AutoResponder规则,先在左侧用Shift按键多选几条会话,拖动到右边即可。

重放HTTP请求

想重新请求某会话,只需要在会话上点击右键,选择Replay->Reissue Request即可。

Fidder重新发送HTTP请求
Fidder重新发送HTTP请求

重放请求很方便,比如在联调时,客户端准备好数据后发起的请求,可以一直保持,不用再重建会话,因为实际开发中一次请求的数据构建可能依赖太多条件和步骤。

备份和载入HTTP会话

对于捕获的会话可以备份为文件,发送给其他开发测试人员,方便协助排查问题,也方便后续再次开发。

实际项目开发中,各个开发人员往往因为沟通和对齐参数花费大量时间,只要把实际请求的数据发送给对方便一目了然知道问题所在。

Fiddler打包会话
Fiddler打包会话

打包后是一个.saz文件,可以使用Fiddler直接打开。

命令行工具 QuickExec

?sometext 按字符查找会话
=status 按状态码选择过滤会话
@host 按主机域名搜寻
bpafter $path 设置中断
g 取消所有中断
select image/css/html 快速查找选择
!listen 8889 监听新端口

以上介绍了Fiddler对HTTP会话的各种操作,最主要的还是要看懂HTTP协议的数据报格式定义,数据报的body部分是业务互相传递的,对于熟悉业务的的编码人员比较了解,但是数据报的头部内容是独立于应用程序生成的,虽然编码人员本身不过多关注,但是出现问题了还是需要去分析的。Fiddler对HTTP会话的各种操作,让通信数据更加透明,通信过程更加可控,使软件开发调试以及测试更加便利,软件使用也很简单,是一款提高生产效率,简化开发过程不可多得的利器。

参考文献:

[1] https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

[2] http://www.telerik.com/fiddler

[3] http://docs.telerik.com/fiddler/configure-fiddler/tasks/configurefiddler