Introduction
This article illustrates building a Fiddler
extension using C# to analyze / summarize HTTP response codes. My goal is to demonstrate how to build extensions that interacts with Fiddler
UI.
Background
Fiddler
is a web-debugging proxy that automatically attaches itself to the WININET chain, so it could capture all requests and responses that goes through the chain. It is able to analyze, tamper all requests and responses it captures. Fiddler
's capabilities could be extended by building custom rules, extensions and inspectors using JScript.NET and/or C#.NET (current accepted version is 2.0). This article discusses about building interactive extension with rich UI.
Using the Code
I have attached compiled extension (DLLs.zip containing FiddlerRespCodeAnalyzer.dll and SessionStatusControl.dll), so you will be able to copy these .dlls to "My Documents\Fiddler2\Scripts" folder and check its functionality. Also, I have attached the relevant code in zip files (FiddlerRespCodeAnalyzer.zip and SessionStatusControl.zip).
Shown below is a screenshot of the extension:
Let's look at the functionality of this extension first. Response Code Analyzer uses sessions captured by Fiddler
and will summarize the composition of different response code types (100s, 200s, 300s, 400s & 500s) in a pie chart. Responses with client errors (400s) and server errors (500s) are being populated into a separate grid with their respective color coding and a description of their response code. Additionally, the user will be able to highlight responses that belong to a particular response category with a respective color. For an example, user can highlight / select all client error responses (400s) in Fiddler main window by clicking on client error label. This extension has two main parts, user control ("SessionStatusControl
") and logic that populates the user control ("FiddlerRespCodeAnalyzer
").
First, you need to have Fiddler
2.2.4.6 or a higher version installed in your computer and .NET CLR 2.0 to develop this extension. Fiddler is freely available via www.fiddler2.com.
Now we will look into the user control. The user control supports the following functionalities:
- Displaying the pie chart
- Displaying number of different types of response codes from selected responses
- Displaying the details of error responses in a grid
- Ability to highlight responses in
Fiddler
main window by clicking on relevant response type summary labels - Ability to select responses in
Fiddler
main window by clicking on relevant response type summary labels
I have compiled this user control as a separate DLL as against creating it in the same project that contains logic for populating the UI. The user control contains the following major components:
SplitContainer
; panel-1 hosting response code summary and details, panel-2 hosting the pie chart - 8 Lables; to display the summary of response codes
DataGridView
; to display details of error responses PictureBox
; to display the pie chart
I was able to access and change attributes of session display list view component of Fiddler
UI. This was possible using the code segment shown below, as done in selectAllSessions
method. You can download "SessionStatusControl
", unzip it and analyze the code for more details:
ListView.ListViewItemCollection lvItems = FiddlerApplication.UI.lvSessions.Items;
Now let's look at the program that has the logic to populate user control / UI. You have to follow these steps to create an extension to Fiddler
, also described in www.fiddler2.com.
- Projects should target ‘Any CPU’ to ensure compatibility with 64bit
Fiddler
. - Create a new Project of type Visual C# Class Library.
- Set the
Fiddler.RequiredVersion
attribute [assembly: Fiddler.RequiredVersion
("2.2.4.6")] - Implement Fiddler interface(s) that is relevant to your task (
IFiddlerExtension, IAutoTamper, IHandleExecAction
) - Drop your assembly .DLLs (FiddlerRespCodeAnalyzer.dll and SessionStatusControl.dll) in your \My Documents\Fiddler2\Scripts folder (or use \Program Files\Fiddler2\Scripts to make it available to all users on the machine)
- Start
Fiddler
.
In this extension, I have implemented the IFiddlerExtension
interface and implemented its methods OnLoad
and OnBeforeUnload
. In the constructor of class RespCodeAnalyzerExt
I have instantiated my user control and its components. Then, I have added my user control instance to Fiddler
UI in OnLoad
method as indicated below. It is important to note that Fiddler
UI will be available only from this point onwards.
FiddlerApplication.UI.tabsViews.TabPages.Add(oPage);
In order for me to analyze the session status codes of sessions that the user has selected, I need to capture those session details form session display list view of Fiddler
UI. I'm achieving this in OnLoad
method by registering an event handler to CalculateReport
event through CalculateReportHandler
delegate as indicated below:
FiddlerApplication.CalculateReport +=
new CalculateReportHandler(FiddlerApplication_CalculateReport);
FiddlerApplication_CalculateReport
has the logic of analyzing session status codes of selected sessions. It categorizes available session status codes to different categories (100, 200, 300, 400 & 500) and remembers them, displaying these summary details as a pie chart. This method also performs special processing required for response codes 400s and 500s by displaying the relevant details with a full description of relevant codes as indicated below:
if (code == 4 || code == 5) <
{
String[] row = { httpResponse.ToString(),
((HTTP_ERROR_ResponseCode)httpResponse).ToString(), "HTTP", s.hostname, s.fullUrl };
gridSessionDetails.Rows.Add(row);
}
I'm maintaining the error codes (400s & 500s) in an enum
structure as shown below:
enum HTTP_ERROR_ResponseCode
{
Bad_Request = 400,
Unauthorized = 401,
.
You can download "FiddlerRespCodeAnalyzer
", unzip it and analyze the code for more details.
Points of Interest
There aren't many articles explaining how to build extensions that interact with Fiddler
UI. In this article, I tried to fill that gap. So, by referring to this code, someone with a great imagination could build a very useful extension.
History
- 22/06/2010 - This is the initial version of the
Fiddler
extension, Response Code Analyzer
FiddlerRespCodeAnalyzer
- 1.0.0.0 SessionStatusControl
- 1.0.0.0
Software engineer with 5+ years of IT industry experience in .NET, Java, PEGA, Jacada (MainFrame env), PERL & C++.
Business domains - Banking, Insurance, ERP
Bachelor's @ UCSC
Masters @ SLIIT
Research Interests
*Bio-Informatics
Method for predicting membrane spanning regions of trans-membrane proteins using HMM & HTK
*Computer Immune systems
Blog
http://www.bioinformaticssrilanka.blogspot.com/