Fiddler的下载
打开官网,官网下载地址是Download Fiddler Web Debugging Tool for Free by Telerik
Fiddler的配置
由于fiddler安装后默认只能抓取http请求,如果需要抓取https请求需要进行配置。
打开Fiddler,点击工具栏中的Tools—>Options
点击Actions,点击第二项:Export Root Certificate to Desktop,这时候桌面上会出现证书FiddlerRoot.cer文件,点击OK设置成功,关闭fiddler。
一定要把上面勾选完再导出证书!!!!
浏览器的配置
PC端,在浏览器中导入证书FiddlerRoot.cer,以谷歌浏览器为例说明,在浏览器上输入: chrome://settings/ 然后进入高级设置,点击管理证书。
浏览器不导入证书的话,上网会一直报不安全的链接!!!
至此,已经可以监听PC端浏览器的https请求了。
手机端的配置
以IOS手机为例 (确保手机和电脑在同一个局域网内,都连公司wifi操作即可)
修改WIFI网络,服务器号为电脑IP地址
重启Fidder
安装手机证书,在手机浏览器一栏输入电脑的IP地址和端口号
这里我是192.XXX.X.XX:8888。进入一个网页,点击最下面那个FiddlerRoot certificate下载证书,下载成功后在设置里面安装,安装步骤:
对证书进行信任
关于安卓手机:打开高级设置->安全->从SD卡安装证书->找到证书文件->点击后为证书命名点击确定即可安装成功。
以上配置好后,就可以对手机进行抓包测试了,注意fiddler需要重启。
可能会遇到的问题 出现Tunnel to 443
打开fiddler,在右侧的选项卡里找到FiddlerScript标签,在顶上的 Go to 的下拉列表里选择“OnBeforeRequest”。
将下面代码加入方法尾部,也就是最后一个括号的前面。
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);
(hosts变量定义的域名,让Fiddler欺骗浏览器的域名。代码解释:如果这些指定的域名上有从浏览器传来CONNECT的请求时,直接返回一个假的Response,这时Fiddler不会再试图去让请求的实际响应者回应这个CONNECT请求,而是自己返回了一个请求。浏览器在收到这个请求以后,认为是服务器已经返回了安全信息,继续发送请求。Fiddler在收到之后的请求,会将URL中的https替换为http,端口强制更换为80,再发给请求的实际响应者。)
Tunnel to 443 对于 安卓 有些版本需要VirtualXposed框架
一些辅助设置
1、HTTP请求和HTTPS请求混在一块会看的眼花,我们可以小小的设置一下,让HTTP请求和HTTPS请求显示不一样的颜色。
在OnBeforeRequest这个方法里,添加一些代码。
if(oSession.isHTTPS && oSession.url.indexOf(oSession.host)> -1){
oSession["ui-color"] = "blue";
}
if(!oSession.isHTTPS && oSession.url.indexOf(oSession.host)> -1){
oSession["ui-color"] = "green";
}
2、查看接口响应时间
工具栏中rules->customize Rules
打开文件吧如下代码添加到headers中
function BeginRequestTime(oS: Session)
{
if (oS.Timers != null)
{
return oS.Timers.ClientBeginRequest.ToString();
}
return String.Empty;
}
public static BindUIColumn("Time Taken")
function CalcTimingCol(oS: Session){
var sResult = String.Empty;
if ((oS.Timers.ServerDoneResponse > oS.Timers.ClientDoneRequest))
{
sResult = (oS.Timers.ServerDoneResponse - oS.Timers.ClientDoneRequest).ToString();
}
return sResult;
}
添加成功后如下图所示