@@ -0,0 +1,592 @@
import System ;
import System . IO ;
import System . Windows . Forms ;
import Microsoft . VisualBasic ;
import Fiddler ;
// GLOBALIZATION NOTE:
// Be sure to save this file with UTF-8 Encoding if using any non-ASCII characters
// in strings, etc.
//
// JScript Reference
// http://www.fiddler2.com/redir/?id=msdnjsnet
//
// FiddlerScript Reference
// http://www.fiddler2.com/redir/?id=fiddlerscriptcookbook
//
// FiddlerScript Editor:
// http://www.fiddler2.com/redir/?id=fiddlerscripteditor
class Handlers
{
// The following snippet demonstrates a custom-bound column for the web sessions list.
// See http://www.fiddler2.com/fiddler/help/configurecolumns.asp for more info
public static BindUIColumn ( "BeginRequestTime" , 90 )
function BeginRequestTime ( oS : Session )
{
if ( oS . Timers != null )
{
return oS . Timers . ClientBeginRequest . ToString ( "H:mm:ss.ffff" ) ;
}
return String . Empty ;
}
public static BindUIColumn ( "EndRequestTime" , 90 )
function EndRequestTime ( oS : Session )
{
if ( oS . Timers != null )
{
return oS . Timers . ClientDoneResponse . ToString ( "H:mm:ss.ffff" ) ;
}
return String . Empty ;
}
public static RulesOption ( "Hide 304s" )
var m_Hide304s : boolean = false ;
// Cause Fiddler to override the Accept-Language header with one of the defined values
public static RulesOption ( "Request &Japanese Content" )
var m_Japanese : boolean = false ;
// Cause Fiddler to override the User-Agent header with one of the defined values
RulesString ( "&User-Agents" , true )
RulesStringValue ( 0 , "Netscape &3" , "Mozilla/3.0 (Win95; I)" )
RulesStringValue ( 1 , "&IEMobile" , "Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.12)" )
RulesStringValue ( 2 , "&Safari (XP)" , "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9.1" )
RulesStringValue ( 3 , "IE &6 (XPSP2)" , "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" )
RulesStringValue ( 4 , "IE &7 (Vista)" , "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1)" )
RulesStringValue ( 5 , "IE &8 (Win2k3 x64)" , "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; WOW64; Trident/4.0)" )
RulesStringValue ( 6 , "IE 8 (Win7)" , "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)" )
RulesStringValue ( 7 , "IE 8 (IE7 CompatMode)" , "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0)" )
RulesStringValue ( 8 , "&Opera 10" , "Opera/9.80 (Windows NT 5.2; U; en) Presto/2.2.15 Version/10.00" )
RulesStringValue ( 9 , "&Firefox 2" , "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.10) Gecko/20071115 Firefox/2.0.0.10" )
RulesStringValue ( 10 , "&Firefox 3.5" , "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3" )
RulesStringValue ( 10 , "&Firefox (Mac)" , "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3" )
RulesStringValue ( 12 , "Chrome" , "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.24 Safari/532.0" )
RulesStringValue ( 13 , "&Custom..." , "%CUSTOM%" )
public static var sUA : String = null ;
// Cause Fiddler to delay HTTP traffic to simulate typical 56k modem conditions
public static RulesOption ( "Simulate &Modem speeds" , "Per&formance" )
var m_SimulateModem : boolean = false ;
// Removes HTTP-caching related headers and specifies "no-cache" on requests and responses
public static RulesOption ( "&Disable Caching" , "Per&formance" )
var m_DisableCaching : boolean = false ;
// Show the duration between the start of Request.Send and Response.Completed in Milliseconds
public static RulesOption ( "&Show Time-to-Last-Byte" , "Per&formance" )
var m_ShowTTLB : boolean = false ;
// Show the time of response completion
public static RulesOption ( "Show Response &Timestamp" , "Per&formance" )
var m_ShowTimestamp : boolean = false ;
// Force a manual reload of the script file. Resets all
// RulesOption variables to their defaults.
public static ToolsAction ( "Reset Script" )
function DoManualReload ( ) {
FiddlerObject . ReloadScript ( ) ;
}
public static ContextAction ( "Decode Selected Sessions" )
function DoRemoveEncoding ( oSessions : Session [ ] ) {
for ( var x = 0 ; x < oSessions . Length ; x ++ ) {
oSessions [ x ] . utilDecodeRequest ( ) ;
oSessions [ x ] . utilDecodeResponse ( ) ;
}
}
static function OnBoot ( ) {
// MessageBox.Show("Fiddler has finished booting");
// System.Diagnostics.Process.Start("iexplore.exe");
// FiddlerObject.UI.ActivateRequestInspector("HEADERS");
// FiddlerObject.UI.ActivateResponseInspector("HEADERS");
}
static function OnShutdown ( ) {
// MessageBox.Show("Fiddler has shutdown");
}
static function OnAttach ( ) {
// MessageBox.Show("Fiddler is now the system proxy");
// System.Diagnostics.Process.Start("proxycfg.exe", "-u"); // Notify WinHTTP of proxy change
}
static function OnDetach ( ) {
// MessageBox.Show("Fiddler is no longer the system proxy");
// System.Diagnostics.Process.Start("proxycfg.exe", "-u"); // Notify WinHTTP of proxy change
}
static function OnBeforeRequest ( oSession : Session )
{
// Sample Rule: Color ASPX requests in RED
// if (oSession.uriContains(".aspx")) { oSession["ui-color"] = "red"; }
// Sample Rule: Flag POSTs to fiddler2.com in italics
// if (oSession.HostnameIs("www.fiddler2.com") && oSession.HTTPMethodIs("POST")) { oSession["ui-italic"] = "yup"; }
// Sample Rule: Break requests for URLs containing "/sandbox/"
// if (oSession.uriContains("/sandbox/")){
// oSession.oFlags["x-breakrequest"] = "yup"; // Existence of the x-breakrequest flag creates a breakpoint; the "yup" value is unimportant.
// }
if ( ( null != gs_ReplaceToken ) && ( oSession . url . indexOf ( gs_ReplaceToken ) > - 1 ) ) { // Case sensitive
oSession . url = oSession . url . Replace ( gs_ReplaceToken , gs_ReplaceTokenWith ) ;
}
if ( ( null != gs_OverridenHost ) && ( oSession . host . toLowerCase ( ) == gs_OverridenHost ) ) {
oSession [ "x-overridehost" ] = gs_OverrideHostWith ;
}
if ( ( null != bpRequestURI ) && oSession . uriContains ( bpRequestURI ) ) {
oSession [ "x-breakrequest" ] = "uri" ;
}
if ( ( null != bpMethod ) && ( oSession . HTTPMethodIs ( bpMethod ) ) ) {
oSession [ "x-breakrequest" ] = "method" ;
}
if ( ( null != uiBoldURI ) && oSession . uriContains ( uiBoldURI ) ) {
oSession [ "ui-bold" ] = "QuickExec" ;
}
if ( m_SimulateModem ) {
// Delay sends by 300ms per KB uploaded.
oSession [ "request-trickle-delay" ] = "300" ;
}
if ( m_DisableCaching ) {
oSession . oRequest . headers . Remove ( "If-None-Match" ) ;
oSession . oRequest . headers . Remove ( "If-Modified-Since" ) ;
oSession . oRequest [ "Pragma" ] = "no-cache" ;
}
// User-Agent Overrides
if ( null != sUA ) {
oSession . oRequest [ "User-Agent" ] = sUA ;
}
if ( m_Japanese ) {
oSession . oRequest [ "Accept-Language" ] = "ja" ;
}
}
static function OnBeforeResponse ( oSession : Session )
{
if ( m_SimulateModem ) {
// Delay receives by 150ms per KB downloaded.
oSession [ "response-trickle-delay" ] = "150" ;
}
if ( m_DisableCaching ) {
oSession . oResponse . headers . Remove ( "Expires" ) ;
oSession . oResponse [ "Cache-Control" ] = "no-cache" ;
}
if ( m_ShowTimestamp ) {
oSession [ "ui-customcolumn" ] = DateTime . Now . ToString ( "H:mm:ss.ffff" ) + " " + oSession [ "ui-customcolumn" ] ;
}
if ( m_ShowTTLB ) {
oSession [ "ui-customcolumn" ] = oSession . oResponse . iTTLB + "ms " + oSession [ "ui-customcolumn" ] ;
}
if ( m_Hide304s && oSession . responseCode == 304 ) {
oSession [ "ui-hide" ] = "true" ;
}
if ( ( bpStatus > 0 ) && ( oSession . responseCode == bpStatus ) ) {
oSession [ "x-breakresponse" ] = "status" ;
}
if ( ( null != bpResponseURI ) && oSession . uriContains ( bpResponseURI ) ) {
oSession [ "x-breakresponse" ] = "uri" ;
}
oSession [ "ui-customcolumn" ] = oSession . oResponse . iTTLB ;
oSession [ "ui-comments" ] = DateTime . Now . ToString ( "H:mm:ss.ffff" ) ;
}
static function getSentCookie ( oS : Session ) { return oS . oResponse . iTTLB . ToString ; }
static function Main ( )
{
var today : Date = new Date ( ) ;
FiddlerObject . StatusText = " CustomRules.js was loaded at: " + today ;
// Uncomment to add a "Server" column containing the response "Server" header, if present
//FiddlerObject.UI.lvSessions.AddBoundColumn("Time", 50, getSentCookie);
}
// These static variables are used for simple breakpointing & other QuickExec rules
static var bpRequestURI :String = null ;
static var bpResponseURI :String = null ;
static var bpStatus :int = - 1 ;
static var bpMethod : String = null ;
static var uiBoldURI : String = null ;
static var gs_ReplaceToken : String = null ;
static var gs_ReplaceTokenWith : String = null ;
static var gs_OverridenHost : String = null ;
static var gs_OverrideHostWith : String = null ;
public static ToolsAction ( "Write all session timers to CSV file" )
function WriteAllSessionTimers ( )
{
var fileName = GetSaveFileName ( ) ;
if ( fileName != null )
{
var oSessions : Fiddler . Session [ ] = FiddlerApplication . UI . GetAllSessions ( ) ;
var myUse : System . String = "Manual " + DateTime . Now . ToString ( "H:mm:ss.ffff" ) ;
WriteSelectedSessionTimersToFileName ( oSessions , fileName , myUse ) ;
}
}
// public static ContextAction("Write selected session timers to CSV file")
// function WriteSelectedSessionTimers(oSessions: Fiddler.Session[])
// {
// var fileName = GetSaveFileName();
// if (fileName != null)
// {
// WriteSelectedSessionTimersToFileName(oSessions, fileName);
// }
// }
public static function GetSaveFileName ( ) {
return ( "C:/Fiddler/log.csv" ) ;
}
// public static function GetSaveFileName()
// {
// var sfd : System.Windows.Forms.SaveFileDialog = new System.Windows.Forms.SaveFileDialog();
// sfd.Filter = "Tab Separated Value (*.tsv)|*.tsv|All files (*.*)|*.*";
// if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
// {
// return(sfd.FileName);
// }
// else return (null);
// }
public static function WriteSelectedSessionTimersToFileName ( oSessions : Fiddler . Session [ ] , filename : System . String , scenario : System . String )
{
try
{
if ( oSessions == null || oSessions . Length == 0 )
{
MessageBox . Show ( "Please select sessions first" , "Warning" ) ;
return ;
}
var sb : System . Text . StringBuilder = new System . Text . StringBuilder ( ) ;
var hb : System . Text . StringBuilder = new System . Text . StringBuilder ( ) ;
hb . Append ( "Host,Method,PathAndQuery,SOAPAction,MimeType,ClientConnected,ClientDoneRequest,ServerConnected,ServerGotRequest,ServerBeginResponse,ServerDoneResponse,ClientBeginResponse,ClientDoneResponse,Scenario,TotalTimeMS,TTLB,ResponseBodySize\r\n" ) ;
for ( var looper = 0 ; looper < oSessions . Length ; looper ++ )
{
var ts : System . TimeSpan = null ;
var dtStart : DateTime = oSessions [ looper ] . Timers . ClientConnected ;
var dtEnd : DateTime = oSessions [ looper ] . Timers . ClientDoneResponse ;
ts = dtEnd - dtStart ;
var mimeType = null ;
var soapaction = null ;
if ( oSessions [ looper ] . oResponse . headers . Exists ( "Content-Type" ) )
{
mimeType = oSessions [ looper ] . oResponse . headers [ "Content-Type" ] ;
if ( mimeType . indexOf ( ';' ) > - 1 ) mimeType = mimeType . substr ( 0 , mimeType . indexOf ( ';' ) ) ;
}
soapaction = oSessions [ looper ] . oRequest . headers [ "SOAPAction" ] ;
sb . Append ( oSessions [ looper ] . host ) . Append ( ',' )
. Append ( oSessions [ looper ] . oRequest . headers . HTTPMethod ) . Append ( ',' )
. Append ( oSessions [ looper ] . PathAndQuery ) . Append ( ',' )
. Append ( soapaction ) . Append ( ',' )
. Append ( mimeType ) . Append ( ',' )
. Append ( oSessions [ looper ] . Timers . ClientConnected . ToString ( "HH:mm:ss.ffff" ) ) . Append ( ',' )
. Append ( oSessions [ looper ] . Timers . ClientDoneRequest . ToString ( "HH:mm:ss.ffff" ) ) . Append ( ',' )
. Append ( oSessions [ looper ] . Timers . ServerConnected . ToString ( "HH:mm:ss.ffff" ) ) . Append ( ',' )
. Append ( oSessions [ looper ] . Timers . ServerGotRequest . ToString ( "HH:mm:ss.ffff" ) ) . Append ( ',' )
. Append ( oSessions [ looper ] . Timers . ServerBeginResponse . ToString ( "HH:mm:ss.ffff" ) ) . Append ( ',' )
. Append ( oSessions [ looper ] . Timers . ServerDoneResponse . ToString ( "HH:mm:ss.ffff" ) ) . Append ( ',' )
. Append ( oSessions [ looper ] . Timers . ClientBeginResponse . ToString ( "HH:mm:ss.ffff" ) ) . Append ( ',' )
. Append ( oSessions [ looper ] . Timers . ClientDoneResponse . ToString ( "HH:mm:ss.ffff" ) ) . Append ( ',' )
. Append ( scenario ) ;
if ( oSessions [ looper ] . responseBodyBytes != null ) {
var RequestStart :DateTime = oSessions [ looper ] . Timers . ClientConnected ;
var ResponseFinish :DateTime = oSessions [ looper ] . Timers . ClientDoneResponse ;
sb . Append ( ',' ) . Append ( ( ResponseFinish - RequestStart ) . TotalMilliseconds ) ;
sb . Append ( ',' ) . Append ( oSessions [ looper ] . oResponse . iTTLB . ToString ( ) ) ;
sb . Append ( ',' ) . Append ( oSessions [ looper ] . responseBodyBytes . Length ) . Append ( "\r\n" ) ;
}
else sb . Append ( "\r\n" ) ;
}
var sw : System . IO . StreamWriter ;
if ( System . IO . File . Exists ( GetSaveFileName ( ) ) ) {
sw = System . IO . File . AppendText ( filename ) ;
sw . Write ( sb . ToString ( ) ) ;
}
else {
sw = System . IO . File . CreateText ( filename ) ;
sw . Write ( hb . ToString ( ) ) ;
sw . Write ( sb . ToString ( ) ) ;
}
sw . Close ( ) ;
sw . Dispose ( ) ;
FiddlerObject . UI . actRemoveAllSessions ( ) ;
}
catch ( excpt : System . Exception )
{
MessageBox . Show ( excpt . ToString ( ) ) ;
}
}
//start ResponseTiming
// Description:
// This FiddlerScript sample logs values from all currently
// selected sessions to a file in Tab Separated Value (TSV)
// format.
// Notes:
// * The log file will be created in the Capture folder and
// has the name: ResponseTiming.log
// * Subsequent executions of this script will overwrite the
// the previous ResponseTiming.log file.
// * This script will run against any highlighted Fiddler
// sessions, whether Capture is enabled or not, but it will
// not automatically refresh the log if new Sessions are
// captured.
// Version History:
// * 2009-05-09: initial release
// Usage:
// 1. launch Fiddler
// 2. navigate to Rules > Customize Rules...
// 3. add the following text at the top of the file:
// import System.IO;
// 4. go to very end of file
// 5. paste all lines between 'start ResponseTiming' and
// 'end ResponseTiming' above the last close curly brace: }
// 6. choose Yes when prompted to Save Changes
// 7. navigate to Tools > Log ResponseTimes for Selected Sessions
// 8. open the .log file in %USERPROFILE%\Documents \Fiddler2\Capture
// in Microsoft Excel or other editor of choice.
//
//public static ToolsAction("Log ResponseTimes for Selected Sessions")
//function DoLogSessions()
//{
//
//
// var strLogFile = CONFIG.GetPath("Captures") + "ResponseTimes.log";
// var swLogFile:StreamWriter = null;
// try
// // {
// var oSessions = FiddlerApplication.UI.GetAllSessions()
// swLogFile = File.AppendText(strLogFile);
// //set the headings for the log file
// swLogFile.Write("method,");
// swLogFile.Write("protocol,");
// swLogFile.Write("host,");
// swLogFile.Write("ServerPort,");
// swLogFile.Write("uri-stem,");
// swLogFile.Write("Status,");
// swLogFile.Write("ResponseBodySize,");
// swLogFile.Write("ServerIP,");
// swLogFile.Write("ProcessInfo,");
// swLogFile.Write("ClientPort,");
// swLogFile.Write("Proxy,");
// swLogFile.Write("RequestStart,");
// swLogFile.Write("ResponseFinish,");
// swLogFile.Write("TotalMilliseconds,");
// swLogFile.Write("CompressNone,");
// swLogFile.Write("CompressDeflate,");
// swLogFile.WriteLine("CompressGZip");
// for (var x = 0; x < oSessions.Length; x++)
// {
// swLogFile.Write(oSessions[x].oRequest.headers.HTTPMethod + ",");
// swLogFile.Write((oSessions[x].oRequest.headers.UriScheme).ToUpper
// () + ",");
// swLogFile.Write(oSessions[x].host + ",");
// swLogFile.Write(oSessions[x].port + ",");
// swLogFile.Write(oSessions[x].oRequest.headers.RequestPath + ",");
// swLogFile.Write(oSessions[x].responseCode + ",");
// swLogFile.Write(oSessions[x].responseBodyBytes.Length + ",");
// swLogFile.Write(oSessions[x].oFlags["x-hostIP"] + ",");
// swLogFile.Write(oSessions[x].oFlags["x-ProcessInfo"] + ",");
// swLogFile.Write(oSessions[x].oFlags["x-clientPort"] + ",");
// if (oSessions[x].oResponse.headers.Exists("Via"))
// swLogFile.Write(oSessions[x].oResponse["Via"] + ",");
// else
// swLogFile.Write(",");
// var RequestStart:DateTime = oSessions[x].Timers.ClientConnected;
// var ResponseFinish:DateTime = oSessions [x].Timers.ClientDoneResponse;
// if (RequestStart != null)
// swLogFile.Write(RequestStart.ToString("yyyy-MM-ddHH:mm:ss.fffff") + "Z,");
// else
// swLogFile.Write(",");
// if (ResponseFinish != null)
// swLogFile.Write(ResponseFinish.ToString("yyyy-MM-ddHH:mm:ss.fffff") + "Z,");
// else
// swLogFile.Write(",");
// if (ResponseFinish == null || RequestStart == null)
// swLogFile.Write(",");
// else
// swLogFile.Write((ResponseFinish - RequestStart).TotalMilliseconds + ",");
// oSessions[x].utilDecodeResponse();
// swLogFile.Write(oSessions[x].oResponse["Content-Length"] + ",");
// oSessions[x].utilGZIPResponse();
// swLogFile.Write(oSessions[x].oResponse["Content-Length"] + ",");
// oSessions[x].utilDecodeResponse();
// oSessions[x].utilDeflateResponse();
// swLogFile.WriteLine(oSessions[x].oResponse["Content-Length"] + ",");
// }
// }
// catch (ex)
// {
// MessageBox.Show(ex);
// }
// finally
// {
// if (swLogFile != null )
// {
// swLogFile.Close();
// swLogFile.Dispose();
// FiddlerObject.UI.actRemoveAllSessions();
// }
// }
// }
// //end ResponseTiming
// The OnExecAction function is called by either the QuickExec box in the Fiddler window,
// or by the ExecAction.exe command line utility.
static function OnExecAction ( sParams : String [ ] ) {
FiddlerObject . StatusText = "ExecAction: " + sParams [ 0 ] ;
var sAction = sParams [ 0 ] . toLowerCase ( ) ;
switch ( sAction ) {
case "bold ":
if ( sParams . Length < 2 ) { uiBoldURI = null ; FiddlerObject . StatusText = "Bolding cleared" ; return ; }
uiBoldURI = sParams [ 1 ] ; FiddlerObject . StatusText = "Bolding requests for " + uiBoldURI ;
break ;
case "sikuli" :
var fileName : System . String = GetSaveFileName ( ) ;
var oSessions : Fiddler . Session [ ] = FiddlerApplication . UI . GetAllSessions ( ) ;
WriteSelectedSessionTimersToFileName ( oSessions , fileName , sParams [ 1 ] . toString ( ) ) ;
break ;
case "bp" :
FiddlerObject . alert ( "bpu = breakpoint request for uri\nbpm = breakpoint request method\nbps=breakpoint response status\nbpafter = breakpoint response for URI" ) ;
break ;
case "bps ":
if ( sParams . Length < 2 ) { bpStatus = - 1 ; FiddlerObject . StatusText = "Response Status breakpoint cleared" ; return ; }
bpStatus = parseInt ( sParams [ 1 ] ) ; FiddlerObject . StatusText = "Response status breakpoint for " + sParams [ 1 ] ;
break ;
case "bpv" :
case "bpm ":
if ( sParams . Length < 2 ) { bpMethod = null ; FiddlerObject . StatusText = "Request Method breakpoint cleared" ; return ; }
bpMethod = sParams [ 1 ] . toUpperCase ( ) ; FiddlerObject . StatusText = "Request Method breakpoint for " + bpMethod ;
break ;
case "bpu" :
if ( sParams . Length < 2 ) { bpRequestURI = null ; FiddlerObject . StatusText = "RequestURI breakpoint cleared" ; return ; }
if ( sParams [ 1 ] . toLowerCase ( ) . StartsWith ( "http://" ) ) { sParams [ 1 ] = sParams [ 1 ] . Substring ( 7 ) ; }
bpRequestURI = sParams [ 1 ] ;
FiddlerObject . StatusText = "RequestURI breakpoint for " + sParams [ 1 ] ;
break ;
case "bpafter" :
if ( sParams . Length < 2 ) { bpResponseURI = null ; FiddlerObject . StatusText = "ResponseURI breakpoint cleared" ; return ; }
if ( sParams [ 1 ] . toLowerCase ( ) . StartsWith ( "http://" ) ) { sParams [ 1 ] = sParams [ 1 ] . Substring ( 7 ) ; }
bpResponseURI = sParams [ 1 ] ;
FiddlerObject . StatusText = "ResponseURI breakpoint for " + sParams [ 1 ] ;
break ;
case "overridehost" :
if ( sParams . Length < 3 ) { gs_OverridenHost = null ; FiddlerObject . StatusText = "Host Override cleared" ; return ; }
gs_OverridenHost = sParams [ 1 ] . toLowerCase ( ) ;
gs_OverrideHostWith = sParams [ 2 ] ;
FiddlerObject . StatusText = "Connecting to [" + gs_OverrideHostWith + "] for requests to [" + gs_OverridenHost + "]" ;
break ;
case "urlreplace" :
if ( sParams . Length < 3 ) { gs_ReplaceToken = null ; FiddlerObject . StatusText = "URL Replacement cleared" ; return ; }
gs_ReplaceToken = sParams [ 1 ] ;
gs_ReplaceTokenWith = sParams [ 2 ] . Replace ( " " , "%20" ) ; // Simple helper
FiddlerObject . StatusText = "Replacing [" + gs_ReplaceToken + "] in URIs with [" + gs_ReplaceTokenWith + "]" ;
break ;
case "select" :
if ( sParams . Length < 2 ) { FiddlerObject . StatusText = "Please specify Content-Type to select." ; return ; }
FiddlerObject . UI . actSelectSessionsWithResponseHeaderValue ( "Content-Type" , sParams [ 1 ] ) ;
FiddlerObject . StatusText = "Selected sessions returning Content-Type: " + sParams [ 1 ] + "." ;
if ( FiddlerObject . UI . lvSessions . SelectedItems . Count > 0 ) {
FiddlerObject . UI . lvSessions . Focus ( ) ;
}
break ;
case "allbut ":
case "keeponly ":
if ( sParams . Length < 2 ) { FiddlerObject . StatusText = "Please specify Content-Type to retain during wipe." ; return ; }
FiddlerObject . UI . actSelectSessionsWithResponseHeaderValue ( "Content-Type" , sParams [ 1 ] ) ;
FiddlerObject . UI . actRemoveUnselectedSessions ( ) ;
FiddlerObject . UI . lvSessions . SelectedItems . Clear ( ) ;
FiddlerObject . StatusText = "Removed all but Content-Type: " + sParams [ 1 ] ;
break ;
case "stop" :
FiddlerObject . UI . actDetachProxy ( ) ;
break ;
case "start ":
FiddlerObject . UI . actAttachProxy ( ) ;
break ;
case "cls ":
case "clear ":
FiddlerObject . UI . actRemoveAllSessions ( ) ;
break ;
case "g ":
case "go ":
FiddlerObject . UI . actResumeAllSessions ( ) ;
break ;
case "help ":
Utilities . LaunchHyperlink ( "http://www.fiddler2.com/redir/?id=quickexec" ) ;
break ;
case "hide ":
FiddlerObject . UI . actMinimizeToTray ( ) ;
break ;
case "nuke ":
FiddlerObject . UI . actClearWinINETCache ( ) ;
FiddlerObject . UI . actClearWinINETCookies ( ) ;
break ;
case "show ":
FiddlerObject . UI . actRestoreWindow ( ) ;
break ;
case "tail ":
if ( sParams . Length < 2 ) { FiddlerObject . StatusText = "Please specify # of sessions to trim the session list to." ; return ; }
FiddlerObject . UI . TrimSessionList ( int . Parse ( sParams [ 1 ] ) ) ;
break ;
case "quit" :
FiddlerObject . UI . actExit ( ) ;
break ;
case "dump ":
FiddlerObject . UI . actSelectAll ( ) ;
FiddlerObject . UI . actSaveSessionsToZip ( CONFIG . GetPath ( "Captures" ) + "dump.saz" ) ;
FiddlerObject . UI . actRemoveAllSessions ( ) ;
FiddlerObject . StatusText = "Dumped all sessions to " + CONFIG . GetPath ( "Captures" ) + "dump.saz" ;
break ;
default :
if ( sAction . StartsWith ( "http" ) || sAction . StartsWith ( "www" ) ) {
System . Diagnostics . Process . Start ( sAction ) ;
}
else
FiddlerObject . StatusText = "Requested ExecAction: " + sAction + " not found. Type HELP to learn more." ;
}
}
}