Fiddler (HTTP proxy for Windows) is a valuable tool for finding out what is happening in an external environment (e.g. when a client uses IE).
It’s sometimes helpful to pull it’s data into Excel – this allows you to highlight dramatic deviations.
The scripting API allows you to do this – drop the following code into the Fiddler script file-
public static ToolsAction("Copy Request Timings to Excel")
function DoHighlightSlowRequests() {
var oSessions = FiddlerApplication.UI.GetAllSessions();
var s: String = "";
s = s +
"Index\t" +
"URL\t" +
"Is HTTPS\t" +
"Response Code\t" +
"Request Bytes\t" +
"Response Bytes\t" +
"ClientConnected\t" +
"ClientBeginRequest\t" +
"ClientDoneRequest\t" +
"ServerConnected\t" +
"FiddlerBeginRequest\t" +
"ServerGotRequest\t" +
"ServerBeginResponse\t" +
"ServerDoneResponse\t" +
"ClientBeginResponse\t" +
"ClientDoneResponse\t" +
"DNSTime\t" +
"GatewayDeterminationTime\t" +
"TCPConnectTime\t" +
"HTTPSHandshakeTime\t" +
"Request Transmission Time\t" +
"Server Time Spent\t" +
"Response Transmission Time\t" +
"Transmission time (down + up)\t" +
"Total Round Trip Time" +
"\r\n";
for (var x:int = 0; x < oSessions.Length; x++){
var session = oSessions[x]
var timer = session.Timers
// use tabs intead of CSV because
// Excel and .NET have incompatible
// expectations for unicode format
var t = oSessions[x].Timers
var transmissionTime =
new TimeSpan(t.ServerGotRequest.Ticks -
t.FiddlerBeginRequest.Ticks).Milliseconds
var serverTimeSpent =
new TimeSpan(t.ServerDoneResponse.Ticks -
t.ServerGotRequest.Ticks).Milliseconds
var responseTransmissionTime =
new TimeSpan(t.ServerDoneResponse.Ticks -
t.ServerBeginResponse.Ticks).Milliseconds
var totalTransferTime =
transmissionTime + responseTransmissionTime
var roundTripTime =
new TimeSpan(t.ClientDoneResponse.Ticks -
t.ClientBeginRequest.Ticks).Milliseconds
var transmissionTimeStr =
transmissionTime < 0 ? "" : transmissionTime + ""
var serverTimeSpentStr =
serverTimeSpent < 0 ? "" : serverTimeSpent + ""
var responseTransmissionTimeStr =
responseTransmissionTime < 0 ? "" : responseTransmissionTime + ""
var totalTransferTimeStr =
totalTransferTime < 0 ? "" : totalTransferTime + ""
var roundTripTimeStr =
roundTripTime < 0 ? "" : roundTripTime + ""
s = s +
x + "\t" +
oSessions[x].url + "\t" +
oSessions[x].isHTTPS + "\t" +
oSessions[x].responseCode + "\t" +
oSessions[x].requestBodyBytes.Length + "\t" +
oSessions[x].responseBodyBytes.Length + "\t" +
oSessions[x].Timers.ClientConnected.Ticks + "\t" +
oSessions[x].Timers.ClientBeginRequest.Ticks + "\t" +
oSessions[x].Timers.ClientDoneRequest.Ticks + "\t" +
oSessions[x].Timers.ServerConnected.Ticks + "\t" +
oSessions[x].Timers.FiddlerBeginRequest.Ticks + "\t" +
oSessions[x].Timers.ServerGotRequest.Ticks + "\t" +
oSessions[x].Timers.ServerBeginResponse.Ticks + "\t" +
oSessions[x].Timers.ServerDoneResponse.Ticks + "\t" +
oSessions[x].Timers.ClientBeginResponse.Ticks + "\t" +
oSessions[x].Timers.ClientDoneResponse.Ticks + "\t" +
oSessions[x].Timers.DNSTime + "\t" +
oSessions[x].Timers.GatewayDeterminationTime + "\t" +
oSessions[x].Timers.TCPConnectTime + "\t" +
oSessions[x].Timers.HTTPSHandshakeTime + "\t" +
transmissionTimeStr + "\t" +
serverTimeSpentStr + "\t" +
responseTransmissionTimeStr + "\t" +
totalTransferTimeStr + "\t" +
roundTripTimeStr +
"\r\n";
}
System.Windows.Forms.Clipboard.SetText(
s.ToString(),
TextDataFormat.Text);
}