今天我们学习一下fiddlercore自带的sample例子,这个例子写的很不错。
不管学习什么语言,我们都是从主函数开始分析的,所以我们线找到,static void main函数,从第一句开始学习。
1、List<Fiddler.Session> oAllSessions = new List<Fiddler.Session>();
这边定义了一个list,list中存放的是fiddler格式的session,那么我们可以认为这个是用来存放fiddler抓到的包的,所以先有了一个变量oAllSessions,这个其中的Fliddler.Session是规定了list的格式,那么session应该是一个类,类里面包含了各种各样的返回的消息。
2、Fiddler.FiddlerApplication.SetAppDisplayName("FiddlerCoreDemoApp");
第二句,貌似是把某个属性设置为了FiddlerCoreDemoApp,我们打开了explain,可以看到其中的说明:Set the DisplayName for the application(为这个应用设置一个展现的名字)
3、#region AttachEventListeners
第三句,这边是说,使用了一个外侧代码,那么什么是外侧代码呢,其实是说把下面的代码折叠起来,说明这时一个代码段,还是会继续运行的。那我们就看看这个代码段中的内容
4、 Fiddler.FiddlerApplication.OnNotification += delegate(object sender, NotificationEventArgs oNEA) { Console.WriteLine("** NotifyUser: " + oNEA.NotifyString); };
首先我们看到是调用的fiddler包中的fiddlerApplication下面的OnNotification这个方法,打开定义中说明的是,这个fiddler是用来扩展fiddler的包,其中的FiddlerApplication中提供了很多的属性,比如isClosing、oDefaultClientCertificate等,此处使用的是OnNotification,那么我们打开这个定义中的说明,有下面这句话,说是
[CodeDescription("This event fires when a user notification would be shown. See CONFIG.QuietMode property.")](代码说明,这个时间将会被使用当用户监控的东西被显示出来的时候,查看配置安静模式的属性),这边从后面的写到控制台可以认为是打印一些什么东西到控制台上面来,暂时还不知道是打印的什么东西,其实我们winform代码看得多的话就可以知道了,这边是把消息显示出来的意思
5、Fiddler.FiddlerApplication.Log.OnLogString += delegate(object sender, LogEventArgs oLEA) { Console.WriteLine("** LogString: " + oLEA.LogString); };
打印东西到界面上面来
6、 Fiddler.FiddlerApplication.BeforeRequest += delegate(Fiddler.Session oS)
第六句,我们一样地分析,我们点开到explain中,记录中说这个记录了fiddler接收到的信令,就存储在这个beforerequest中,同时,我们看到这边有个session os,其实这个session os中就是我们截取的包中的内容,所以一个接口如果我们需要取到这个接口中head或者parameter中的内容,多半就是在这个里面直接设置了,所以我们可以认为下面的就是设置的可以抓包的内容,那么我们接下来继续阅读源码
7、oS.bBufferResponse = false;
Monitor.Enter(oAllSessions);
oAllSessions.Add(oS);
Monitor.Exit(oAllSessions);
第七句,首先回复的消息我们先清空,然后在显示器上面显示出了oAllSessions中的内容,那oAllSessions中增加了seesion中的内容,最后再退出OAllSessions中的内容,省的一直占用内存,消耗量会特别大,但是我们os中的内容已经全部存到了Monitor中了,所以这段代码只是起了一个显示和存储的作用。从源代码分析到此处,我们可以认为抓包功能已经全部实现了。