Maurice Wu
Published on

Using Fiddler to Capture HTTP(S) Requests

Fiddler是一款适用于Windows 和 Linux的web调试代理软件。一般用来调试分析App/Browser应用内的HTTP(S)请求。

从这开始

打开Fiddler软件,将会自动设置你系统的代理为localhost:8888,这是Fiddler的默认端口。然后点击File --> Capture traffic 开始进行抓包。

fiddler screenshot

查看request 和 response

点击左侧session列表中的某个请求,然后在右侧的操作区中点击Inspectors。上面为request的信息,下面为response的信息。

fiddler screenshot

查看gzip的内容

对于响应头设置了gzip的请求,可以在response区域的Transformer 中切换HTTP compression 为none

fiddler screenshot

捕获HTTPS的内容

在顶部菜单栏的Tool --> options 中,选择HTTPS,勾选以下两个选项

fiddler screenshot

然后Fiddler会在你的机器上安装CA证书,系统会弹出一个确认框,同意安装就可以了。然后重启Fiddler, 就可以抓包HTTPS的内容了。

使用Fiddler做代理转发

在右侧的菜单区域,有一个AutoResponser, 我们可以针对特定的请求配置特定的响应规则

fiddler screenshot

路径规则有三种写法:

string literals

http://www.**example**.com/Path1/ match http://www.something.com/Path1/query=Example

EXACT

EXACT:http://www.example.com/path matche http://www.example.com/path

REGEX

regex:.+.jpg.

matche http://www.example.com/Path1/query=foo.jpg http://www.example.com/Path1/query=example.jpg

详细写法

session 图标

fiddler screenshot

手机端抓包

  1. 确保手机端和PC在同一个局域网内。
  2. 手机端访问PC 局域网ip的8888端口,下载证书。
  3. fiddler screenshot
  4. 在手机上安装证书后,设置你的wifi 代理。服务器主机名为PC 端的局域网ip,端口号为Fiddler软件的监听端口,一般默认是8888。
  5. 勾选Fiddler Connections中的 允许远程连接
    fiddler screenshot
  6. 重启Fiddler, 就可以抓包手机端的请求了。

session请求中的Tunnel to

在session列表中,经常有一些请求的host 为 Tunnel to。

fiddler screenshot

首先需要明确的是为什么会有看起来这么奇怪的请求。 当系统或者浏览器使用了代理的时候,对于HTTPS请求,将会使用Connect方法连接代理服务器,告知该请求的目标机器和端口。一般来说,这个端口都是目标服务器的SSL端口,即443。 当代理服务器在指定的目标主机地址和端口之间建立了TCP连接的时候,就会响应200给Connect方法。之后,代理服务器只是在转发往来于浏览器和目标服务器之间的数据。 之所以需要这样做,是因为HTTPS将目标主机等头部信息都进行了加密,代理服务器无法知道请求的目标地址,所以浏览器在发送HTTPS之前,需要用Conenct方法通知代理服务器应该连接的地址。

Tunnel to的讨论

理解HTTP CONNECT通道

一般来说Connect 方法只是确保代理服务器和目标服务器已经建立了TCP连接, 而不包含请求的具体信息。因此我们可以将其在session列表中隐藏掉,保证清爽。

Rules --> Hide Connects

参考

How to view Web Request and Response in Fiddler

Fiddler小技巧

使用Fiddler进行手机抓包