diff --git a/configure-fiddler/advanced-options/_meta.yml b/configure-fiddler/advanced-options/_meta.yml new file mode 100644 index 0000000..bcf20f2 --- /dev/null +++ b/configure-fiddler/advanced-options/_meta.yml @@ -0,0 +1,2 @@ +title: Advanced Capturing Options +position: 200 \ No newline at end of file diff --git a/configure-fiddler/advanced-options/authenticatewithcbt.md b/configure-fiddler/advanced-options/authenticatewithcbt.md new file mode 100644 index 0000000..c42ed7c --- /dev/null +++ b/configure-fiddler/advanced-options/authenticatewithcbt.md @@ -0,0 +1,49 @@ +--- +title: Authentication to CBT-Protected Server +description: Configure Fiddler Classic to Authenticate to CBT-Protected Server +slug: AuthenticateWithCBT +publish: true +position: 21 +previous_url: /configure-fiddler/tasks/authenticatewithcbt +--- + +# Configure Fiddler Classic to Authenticate to CBT-Protected Server + +1. Click **Rules > Customize Rules**. +2. Scroll to the **OnPeekAtResponseHeaders** function. +3. Add the following code: + ```c# + static function OnPeekAtResponseHeaders(oSession: Session) + { + // To avoid problems with Channel-Binding-Tokens, this block allows Fiddler Classic + // itself to respond to Authentication challenges from HTTPS Intranet sites. + if (oSession.isHTTPS && + (oSession.responseCode == 401) && + // Only permit auto-auth for local apps (e.g. not devices or remote PCs) + (oSession.LocalProcessID > 0) && + // Only permit auth to sites we trust + (Utilities.isPlainHostName(oSession.hostname) + // Replace telerik.com with whatever servers Fiddler Classic should release credentials to. + || oSession.host.EndsWith("telerik.com")) + ) + { + // To use creds other than your Windows login credentials, + // set X-AutoAuth to "domain\\username:password" + // Replace default with specific credentials in this format: + // domain\\username:password. + oSession["X-AutoAuth"] = "(default)"; + oSession["ui-backcolor"] = "pink"; + } + + //... function continues + ``` + + * Replace "telerik.com" with whatever servers Fiddler Classic should release credentials to. By default, Fiddler Classic will release credentials to any intranet sites (sites without a dot in the hostname). + + * Replace "default" with specific credentials in this format: + + ```txt + domain\\username:password + ``` + + * If you specify "(default)", Fiddler Classic will attempt to use the login credentials of whatever user-account that it is running under. diff --git a/configure-fiddler/tasks/bypassupstreamproxy.md b/configure-fiddler/advanced-options/bypassupstreamproxy.md similarity index 55% rename from configure-fiddler/tasks/bypassupstreamproxy.md rename to configure-fiddler/advanced-options/bypassupstreamproxy.md index 2fe47dd..69a28c5 100644 --- a/configure-fiddler/tasks/bypassupstreamproxy.md +++ b/configure-fiddler/advanced-options/bypassupstreamproxy.md @@ -4,16 +4,16 @@ description: Configuration code to bypass the upstream proxy for all requests to slug: BypassUpstreamProxy publish: true position: 23 +previous_url: /configure-fiddler/tasks/bypassupstreamproxy --- -Bypass the Upstream Proxy -========================= +# Bypass the Upstream Proxy -To bypass the upstream proxy for all requests to a specific domain (for example, to emulate the IE Proxy bypass list), [add a rule to Fiddler][1] to the **OnBeforeRequest** function as follows: +To bypass the upstream proxy for all requests to a specific domain (for example, to emulate the IE Proxy bypass list), [add a rule to Fiddler](slug://AddRules) to the **OnBeforeRequest** function as follows: - if (oSession.HostnameIs("www.example.com")){ - oSession.bypassGateway = true; - } - -[1]: ../../Extend-Fiddler/AddRules +```c# +if (oSession.HostnameIs("www.example.com")){ +oSession.bypassGateway = true; +} +``` diff --git a/configure-fiddler/tasks/capturetrafficfromadifferentaccount.md b/configure-fiddler/advanced-options/capturetrafficfromadifferentaccount.md similarity index 62% rename from configure-fiddler/tasks/capturetrafficfromadifferentaccount.md rename to configure-fiddler/advanced-options/capturetrafficfromadifferentaccount.md index f6c35a5..e8b934e 100644 --- a/configure-fiddler/tasks/capturetrafficfromadifferentaccount.md +++ b/configure-fiddler/advanced-options/capturetrafficfromadifferentaccount.md @@ -4,19 +4,14 @@ description: Use Fiddler Classic to capture Traffic from an ASP.NET on IIS or fr slug: CaptureTrafficFromDifferentAccount publish: true position: 14 +previous_url: /configure-fiddler/tasks/capturetrafficfromadifferentaccount --- -Capture Traffic from a Different Account -======================================== +# Capture Traffic from a Different Account To capture traffic from accounts other than the current user (for example, ASP.NET on IIS or a Windows Service), configure that process to use the Fiddler Classic proxy. -For Example ----------------- +For example: -[Configure .NET Applications][1] - -[Configure WinHTTP Applications][2] - -[1]: ./ConfigureDotNETApp -[2]: ./ConfigureWinHTTPApp +[Configure .NET Applications](slug://DotNETConfig) +[Configure WinHTTP Applications](slug://ConfigureWinHTTPApp) diff --git a/configure-fiddler/tasks/chaintoupstreamproxy.md b/configure-fiddler/advanced-options/chaintoupstreamproxy.md similarity index 74% rename from configure-fiddler/tasks/chaintoupstreamproxy.md rename to configure-fiddler/advanced-options/chaintoupstreamproxy.md index 0c1e69a..3a8a9c7 100644 --- a/configure-fiddler/tasks/chaintoupstreamproxy.md +++ b/configure-fiddler/advanced-options/chaintoupstreamproxy.md @@ -4,31 +4,18 @@ description: Configure Fiddler Classic to send and receive web traffic to and fr slug: ChainToUpstreamProxy publish: true position: 12 +previous_url: /configure-fiddler/tasks/chaintoupstreamproxy --- -Chain Fiddler Classic to an Upstream Proxy -================================== +# Chain Fiddler Classic to an Upstream Proxy To configure Fiddler Classic to send and receive web traffic to and from another proxy between Fiddler Classic and the destination server: 1. Close Fiddler Classic application. - 2. Open **Internet Explorer** > **Options** > **Internet Options** > **Connections** > **LAN Settings**. - 3. Click the check box by **Use a proxy server for your LAN**. - - ![Set proxy address][1] - + ![Set proxy address](./images/SetProxyAddress.jpg) 4. Type the address and port number for the upstream proxy. - 5. Restart Fiddler Classic application. You should now see the upstream proxy listed in the Fiddler Classic **About** dialog. - -See Also --------- - -+ [Understanding the Fiddler Classic Proxy][2] - -[1]: ../../images/ChainToUpstreamProxy/SetProxyAddress.jpg -[2]: ../../KnowledgeBase/Proxy diff --git a/configure-fiddler/tasks/fiddler-logging.md b/configure-fiddler/advanced-options/fiddler-logging.md similarity index 95% rename from configure-fiddler/tasks/fiddler-logging.md rename to configure-fiddler/advanced-options/fiddler-logging.md index 6689cad..444e8a6 100644 --- a/configure-fiddler/tasks/fiddler-logging.md +++ b/configure-fiddler/advanced-options/fiddler-logging.md @@ -4,6 +4,7 @@ description: Configure Fiddler Classic to log specific data with FiddlerScript slug: fiddler-logging-fiddlerscript publish: true position: 35 +previous_url: /configure-fiddler/tasks/fiddler-logging --- # Logging in Fiddler Classic @@ -16,14 +17,12 @@ From FiddlerScript, you can do this: FiddlerObject.log("Your message here"); ``` - From a Fiddler extension, do this: ```c# FiddlerApplication.Log.LogString("Your message here"); ``` If you want to get copies of log messages, write the following code in your extension: - ```c# FiddlerApplication.Log.OnLogString += new EventHandler(YourEventHandler); ``` diff --git a/configure-fiddler/tasks/fiddler-preferences.md b/configure-fiddler/advanced-options/fiddler-preferences.md similarity index 99% rename from configure-fiddler/tasks/fiddler-preferences.md rename to configure-fiddler/advanced-options/fiddler-preferences.md index 2e696d9..c31d61a 100644 --- a/configure-fiddler/tasks/fiddler-preferences.md +++ b/configure-fiddler/advanced-options/fiddler-preferences.md @@ -4,6 +4,7 @@ description: List of Fiddler CLassic configurable preferences slug: fiddler-classic-preferences publish: true position: 30 +previous_url: /configure-fiddler/tasks/fiddler-preferences --- # Preferences in Fiddler Classic @@ -23,7 +24,7 @@ fiddler.debug.extensions.verbose = "True" ``` Controls whether the Fiddler Toolbar is visible: -``` +```bash fiddler.ui.toolbar.visible = "True" ``` @@ -68,7 +69,6 @@ Set to "True" to cause Fiddler to abort a download if streaming the response to fiddler.network.streaming.abortifclientaborts = "False" ``` - Set to "True" to cause Fiddler to "forget" received bytes if they are streamed to the client. Similar to the SessionFlag log-drop-response-body, but forgetting occurs during streaming rather than upon response completion: ```bash @@ -90,19 +90,16 @@ Number of milliseconds Fiddler should keep a DNS cache entry in its cache: fiddler.network.timeouts.dnscache = 150000 ``` - When CTRL+X is hit, keep sessions that are either in progress, or marked (at a breakpoint, or with a comment, or with a mark color set) ```bash fiddler.ui.CtrlX.KeepMarked = True ``` - Force Fiddler to always use the RAW request inspector when double-clicking or hitting ENTER on a session: ```bash fiddler.ui.inspectors.request.alwaysuse = "Raw" ``` - Force Fiddler to always use the SyntaxView response inspector when double-clicking or hitting ENTER on a session: ```bash fiddler.ui.inspectors.response.alwaysuse = "SyntaxView" @@ -110,7 +107,6 @@ fiddler.ui.inspectors.response.alwaysuse = "SyntaxView" ** FULL LIST of all preferences in Fiddler Classic** - ```bash addons.ericlaw.hosts.enabled addons.ImageBloat.EmbedAsText diff --git a/images/ConfigureForMac/AllowRemoteComputersToConnect.png b/configure-fiddler/advanced-options/images/AllowRemoteComputersToConnect copy.png similarity index 100% rename from images/ConfigureForMac/AllowRemoteComputersToConnect.png rename to configure-fiddler/advanced-options/images/AllowRemoteComputersToConnect copy.png diff --git a/images/ConfigureForiOS/AllowRemoteComputersToConnect.png b/configure-fiddler/advanced-options/images/AllowRemoteComputersToConnect.png similarity index 100% rename from images/ConfigureForiOS/AllowRemoteComputersToConnect.png rename to configure-fiddler/advanced-options/images/AllowRemoteComputersToConnect.png diff --git a/images/MonitorWindowsPhone7/CertificateWarning.png b/configure-fiddler/advanced-options/images/CertificateWarning.png similarity index 100% rename from images/MonitorWindowsPhone7/CertificateWarning.png rename to configure-fiddler/advanced-options/images/CertificateWarning.png diff --git a/images/MonitorDialupAndVPN/ConnectionName.png b/configure-fiddler/advanced-options/images/ConnectionName.png similarity index 100% rename from images/MonitorDialupAndVPN/ConnectionName.png rename to configure-fiddler/advanced-options/images/ConnectionName.png diff --git a/images/MonitorWindowsPhone7/EditNetwork.png b/configure-fiddler/advanced-options/images/EditNetwork.png similarity index 100% rename from images/MonitorWindowsPhone7/EditNetwork.png rename to configure-fiddler/advanced-options/images/EditNetwork.png diff --git a/images/UseFiddlerAsReverseProxy/FiddlerListensOnPort.png b/configure-fiddler/advanced-options/images/FiddlerListensOnPort.png similarity index 100% rename from images/UseFiddlerAsReverseProxy/FiddlerListensOnPort.png rename to configure-fiddler/advanced-options/images/FiddlerListensOnPort.png diff --git a/images/MonitorWindowsPhone7/InstallCertificate.png b/configure-fiddler/advanced-options/images/InstallCertificate.png similarity index 100% rename from images/MonitorWindowsPhone7/InstallCertificate.png rename to configure-fiddler/advanced-options/images/InstallCertificate.png diff --git a/images/MonitorDialupAndVPN/MonitorAllConnections.png b/configure-fiddler/advanced-options/images/MonitorAllConnections.png similarity index 100% rename from images/MonitorDialupAndVPN/MonitorAllConnections.png rename to configure-fiddler/advanced-options/images/MonitorAllConnections.png diff --git a/images/MonitorWindowsPhone7/OpenCertificate.png b/configure-fiddler/advanced-options/images/OpenCertificate.png similarity index 100% rename from images/MonitorWindowsPhone7/OpenCertificate.png rename to configure-fiddler/advanced-options/images/OpenCertificate.png diff --git a/images/ChainToUpstreamProxy/SetProxyAddress.jpg b/configure-fiddler/advanced-options/images/SetProxyAddress.jpg similarity index 100% rename from images/ChainToUpstreamProxy/SetProxyAddress.jpg rename to configure-fiddler/advanced-options/images/SetProxyAddress.jpg diff --git a/images/MonitorWindowsPhone7/Settings.png b/configure-fiddler/advanced-options/images/Settings.png similarity index 100% rename from images/MonitorWindowsPhone7/Settings.png rename to configure-fiddler/advanced-options/images/Settings.png diff --git a/images/MonitorWindowsPhone7/Wifi.png b/configure-fiddler/advanced-options/images/Wifi.png similarity index 100% rename from images/MonitorWindowsPhone7/Wifi.png rename to configure-fiddler/advanced-options/images/Wifi.png diff --git a/images/MonitorWindowsPhone7/WindowsSecurityAlert.png b/configure-fiddler/advanced-options/images/WindowsSecurityAlert.png similarity index 100% rename from images/MonitorWindowsPhone7/WindowsSecurityAlert.png rename to configure-fiddler/advanced-options/images/WindowsSecurityAlert.png diff --git a/configure-fiddler/tasks/monitordialupandvpn.md b/configure-fiddler/advanced-options/monitordialupandvpn.md similarity index 60% rename from configure-fiddler/tasks/monitordialupandvpn.md rename to configure-fiddler/advanced-options/monitordialupandvpn.md index 763184f..3a9df0e 100644 --- a/configure-fiddler/tasks/monitordialupandvpn.md +++ b/configure-fiddler/advanced-options/monitordialupandvpn.md @@ -4,23 +4,19 @@ description: "Instructions for monitoring traffic via dial-up and VPN in Fiddler slug: MonitorDialupAndVPN publish: true position: 10 +previous_url: /configure-fiddler/tasks/monitordialupandvpn --- -Monitor RAS, VPN or Dialup Connections -====================================== +# Monitor RAS, VPN or Dialup Connections To monitor a dialup or VPN connection, open **Tools -> Options...** and click **Monitor all connections**. -![Monitor all connections][1] +![Monitor all connections](./images/MonitorAllConnections.png) -Or, set [the "Use automatic configuration script" option][2] in your browser. +Or, set [the "Use automatic configuration script" option](slug://ConfigureBrowsers) in your browser. To monitor a VPN or dialup connection that is always active (instead of a LAN connection), set the **HookConnectionNamed** registry value to the name of the connection from **Internet Options**. -![Connection Name][3] +![Connection Name](./images/ConnectionName.png) -Note: IE will always use the proxy settings from any active VPN connection, whether or not that VPN connects to the Internet. - -[1]: ../../images/MonitorDialupAndVPN/MonitorAllConnections.png -[2]: ./ConfigureBrowsers -[3]: ../../images/MonitorDialupAndVPN/ConnectionName.png +Note: IE will always use the proxy settings from any active VPN connection, whether or not that VPN connects to the Internet. \ No newline at end of file diff --git a/configure-fiddler/tasks/monitorpocketpc.md b/configure-fiddler/advanced-options/monitorpocketpc.md similarity index 72% rename from configure-fiddler/tasks/monitorpocketpc.md rename to configure-fiddler/advanced-options/monitorpocketpc.md index 1b4499e..1351447 100644 --- a/configure-fiddler/tasks/monitorpocketpc.md +++ b/configure-fiddler/advanced-options/monitorpocketpc.md @@ -4,33 +4,22 @@ description: Configuration for setting Fiddler Classic on PocketPC slug: MonitorPocketPC publish: true position: 20 +previous_url: /configure-fiddler/tasks/monitorpocketpc --- -Monitor PocketPC -================ +# Monitor PocketPC -Configure Fiddler Classic ------------------ - -1. On the Fiddler Classic server (the machine where Fiddler Classic is installed), [open port 8888 in Windows Firewall][1]. +## Configure Fiddler Classic +1. On the Fiddler Classic server (the machine where Fiddler Classic is installed), open port **8888** in Windows Firewall. 2. Open **ActiveSync > Connection Settings...**. - 3. Under **This Computer is connected to:**, click **Work Network**. - 4. Start Fiddler. - 5. Click **Tools > Options...**. - 6. Ensure "Allow remote clients to connect" is checked. - 7. If you need to click the checkbox, restart Fiddler. -Configure PocketPC ------------------- +## Configure PocketPC 1. On the PocketPC, set the HTTP proxy to be **FIDDLERSERVER:8888**, where FIDDLERSERVER is the machine name for the machine with Fiddler Classic installed. - 2. Connect the PocketPC to ActiveSync. - -[1]: http://windows.microsoft.com/en-us/windows7/open-a-port-in-windows-firewall diff --git a/configure-fiddler/tasks/monitorwindowsphone7.md b/configure-fiddler/advanced-options/monitorwindowsphone7.md similarity index 55% rename from configure-fiddler/tasks/monitorwindowsphone7.md rename to configure-fiddler/advanced-options/monitorwindowsphone7.md index 891c3fe..9944aec 100644 --- a/configure-fiddler/tasks/monitorwindowsphone7.md +++ b/configure-fiddler/advanced-options/monitorwindowsphone7.md @@ -3,90 +3,55 @@ title: Monitor Windows Phone slug: MonitorWindowsPhone7 publish: true position: 19 +previous_url: /configure-fiddler/tasks/monitorwindowsphone7 --- -Monitor Windows Phone -===================== +# Monitor Windows Phone -Configure Fiddler ------------------ +## Configure Fiddler 1. Start Fiddler Classic on the Fiddler server (the machine that will capture the traffic). - 2. Click **Tools > Options**. Click **Allow remote clients to connect**. - - ![Allow remote clients to connect][1] - + ![Allow remote clients to connect](./images/AllowRemoteComputersToConnect.png) 3. Restart Fiddler. - 4. In the Windows Security Alert dialog, check all three checkboxes and click the **Allow Access** button. - - ![Windows Security Alert][2] + ![Windows Security Alert](./images/WindowsSecurityAlert.png) To verify this configuration, enable your Windows Phone WiFi connection and visit **http://FIDDLERSERVER:8888**, where FIDDLERSERVER is the machine name for the machine running Fiddler. This should display the **Fiddler Echo Service** web site. -Configure Windows Phone ------------------------ +## Configure Windows Phone 1. Tap **Settings > WiFi**. - - ![Settings][3] - + ![Settings](./images/Settings.png) 2. Tap the active WiFi connection. - - ![WiFi][4] - + ![WiFi](./images/Wifi.png) 3. Slide the **Proxy Slider** to **On**. - 4. In the **Server/URL** field, type the machine name for the Fiddler server. - 5. In the **Port** field, type **8888**. - - ![EditNetwork.png][5] - + ![EditNetwork.png](./images/EditNetwork.png) 6. Tap the checkmark icon. -Decrypt HTTPS Traffic ---------------------- -1. [Configure Fiddler Classic to decrypt HTTPS traffic][6]. +## Decrypt HTTPS Traffic +1. [Configure Fiddler Classic to decrypt HTTPS traffic](slug://DecryptHTTPS). 2. On the Windows Phone, use Mobile IE to request an HTTPS protocol URL. - -3. Go to **http://FIDDLERSERVER:8888/FiddlerRoot.cer**. - +3. Go to `http://FIDDLERSERVER:8888/FiddlerRoot.cer`. 4. Tap the icon labeled **Tap to open the file fiddlerroot.cer**. - - ![Open Certificate][8] - + ![Open Certificate](./images/OpenCertificate.png) 5. Tap **install**. - - ![Install Certificate][9] + ![Install Certificate](./images/InstallCertificate.png) Note: There is no known resource containing steps to remove security certificates from a Windows Phone. This may prevent connecting to a different Fiddler proxy, which will use a different security certificate. -Disable Monitoring ------------------- +## Disable Monitoring + After Fiddler Classic monitoring is complete: 1. Tap **Settings > WiFi**. - 2. Tap the active WiFi connection. - 3. Slide the **Proxy Slider** to **Off**. +## See Also +[No Windows Phone 7 traffic](slug://NoWindowsPhone7Traffic) -See Also --------- -[No Windows Phone 7 traffic][10] - -[1]: ../../images/MonitorWindowsPhone7/AllowRemoteComputersToConnect.png -[2]: ../../images/MonitorWindowsPhone7/WindowsSecurityAlert.png -[3]: ../../images/MonitorWindowsPhone7/Settings.png -[4]: ../../images/MonitorWindowsPhone7/Wifi.png -[5]: ../../images/MonitorWindowsPhone7/EditNetwork.png -[6]: ./DecryptHTTPS -[7]: ../../images/MonitorWindowsPhone7/CertificateWarning.png -[8]: ../../images/MonitorWindowsPhone7/OpenCertificate.png -[9]: ../../images/MonitorWindowsPhone7/InstallCertificate.png -[10]: ../Troubleshooting/NoWindowsPhone7Traffic diff --git a/configure-fiddler/tasks/usefiddlerasreverseproxy.md b/configure-fiddler/advanced-options/usefiddlerasreverseproxy.md similarity index 66% rename from configure-fiddler/tasks/usefiddlerasreverseproxy.md rename to configure-fiddler/advanced-options/usefiddlerasreverseproxy.md index 1bcbeb3..edf3bc9 100644 --- a/configure-fiddler/tasks/usefiddlerasreverseproxy.md +++ b/configure-fiddler/advanced-options/usefiddlerasreverseproxy.md @@ -3,65 +3,43 @@ title: Use Fiddler as a Reverse Proxy slug: UseFiddlerAsReverseProxy publish: true position: 13 +previous_url: /configure-fiddler/tasks/usefiddlerasreverseproxy --- -Use Fiddler Classic as a Reverse Proxy -============================== +# Use Fiddler Classic as a Reverse Proxy -Configure Fiddler Classic as Reverse Proxy ----------------------------------- +## Configure Fiddler Classic as Reverse Proxy To use this method, the hostname for the request to reroute must be **127.0.0.1:8888**, **localhost:8888**, **[::1]:8888**, or the machine's NETBIOS hostname on port **8888**. 1. Click **Tools > Options**. Ensure **Allow remote clients to connect** is checked. - - ![Allow remote clients to connect][1] - + ![Allow remote clients to connect](./images/AllowRemoteComputersToConnect.png) 2. Close Fiddler Classic. - 3. Start **REGEDIT**. - 4. Create a new DWORD named **ReverseProxyForPort** inside **HKEY_CURRENT_USER\SOFTWARE\Microsoft\Fiddler2**. - 5. Set the DWORD to the local port where Fiddler Classic will re-route inbound traffic (usually port **80** for a standard HTTP server). - 6. Restart Fiddler Classic. +7. In a browser, go to `http://127.0.0.1:8888`. -7. In a browser, go to http://127.0.0.1:8888. - -Write a FiddlerScript Rule --------------------------- +## Write a FiddlerScript Rule 1. Click **Tools > Options**. Ensure **Allow remote clients to connect** is checked. - - ![Allow remote clients to connect][1] - + ![Allow remote clients to connect](./images/AllowRemoteComputersToConnect.png) 2. Click **Tools > Options**, and ensure the "Allow remote clients to connect" checkbox is checked. - 3. Restart Fiddler Classic if prompted. - 3. Click **Rules > Customize Rules**. - 4. Inside the OnBeforeRequest handler*, add a new line of code: - - if (oSession.host.toLowerCase() == "webserver:8888") oSession.host = "webserver:80"; - + ```c# + if (oSession.host.toLowerCase() == "webserver:8888") oSession.host = "webserver:80"; + ``` 5. Using a browser on the client machine, go to http://webserver:8888. -Configure Fiddler Classic to Listen to Client Application Target Port -------------------------------------------------------------- +## Configure Fiddler Classic to Listen to Client Application Target Port -1. Reconfigure your target server to listen on a different port. For example, if a web server runs on port 80, reconfigure it to run on port 81. +1. Reconfigure your target server to listen on a different port. For example, if a web server runs on port 80, reconfigure it to run on port 81. 2. Click **Tools > Options...**. - 3. Click **Connections**. - 4. Type the client's target port number next to **Fiddler listens to port:** - - ![Fiddler Classic listens to port][2] - -5. Configure Fiddler Classic as a reverse proxy or write a FiddlerScript Rule to re-route traffic to the target server's new port (described above). - -[1]: ../../images/UseFiddlerAsReverseProxy/AllowRemoteComputersToConnect.png -[2]: ../../images/UseFiddlerAsReverseProxy/FiddlerListensOnPort.png + ![Fiddler Classic listens to port](./images/FiddlerListensOnPort.png) +5. Configure Fiddler Classic as a reverse proxy or write a FiddlerScript Rule to re-route traffic to the target server's new port (described above). \ No newline at end of file diff --git a/configure-fiddler/capturing-traffic/_meta.yml b/configure-fiddler/capturing-traffic/_meta.yml new file mode 100644 index 0000000..44e8c10 --- /dev/null +++ b/configure-fiddler/capturing-traffic/_meta.yml @@ -0,0 +1,2 @@ +title: Capturing Traffic +position: 100 \ No newline at end of file diff --git a/configure-fiddler/capturing-traffic/configurebrowsers.md b/configure-fiddler/capturing-traffic/configurebrowsers.md new file mode 100644 index 0000000..beaaf3a --- /dev/null +++ b/configure-fiddler/capturing-traffic/configurebrowsers.md @@ -0,0 +1,53 @@ +--- +title: Capture Configuration for Browsers +description: Specific configuration steps for enabling capture on Opera, Firefox, and other non-Chromium browsers. +slug: ConfigureBrowsers +publish: true +position: 10 +previous_url: /configure-fiddler/tasks/configurebrowsers +--- + +# Configure Browsers + +## Clear Cache + +To ensure all requests are sent and captured, clear your browser's cache before beginning a capture. + +## Chrome, Edge, and Brave + +* To capture traffic from most browsers, enable **File > Capture Traffic**. +* Record traffic sent to **http://localhost** or **htp://127.0.0.1** from the targeted browser. + +## Firefox + +* To capture HTTP traffic from **Firefox 4+**, either: + * Click **Tools > Monitor with Fiddler > Use Fiddler automatically** to configure with [FiddlerHook][8], or + * Click **Tools > Options > Advanced > Network > Settings > Use System Proxy Settings**. + ![Use System Proxy Settings](./images/UseSystemProxySettings.png) +* [Capture HTTPS traffic from Firefox](slug://FirefoxHTTPS) + +## Manual Configuration + +To manually configure any browser to send traffic to Fiddler, set the browser to connect to a proxy server. This setting is usually in the **Options** or **Preferences** menu. Use these settings: + +```txt +Address: 127.0.0.1 +Port: 8888 +``` + +Note: If a browser uses these settings, revert these settings after you close Fiddler, or the browser will not load pages. For example, Firefox will show the following error message: + +![Firefox Proxy Error](./images/FirefoxProxyError.png) + +To instead allow Fiddler Classic to automatically enable and disable the proxy, use **Proxy Auto-configuration** with a URL pointing to %userprofile%\Documents\Fiddler2\Scripts\BrowserPAC.js. + +For example, in Firefox, click **Tools > Options > Advanced > Network > Settings**, and input the URL of the BrowserPAC.js. + +![Automatic proxy configuration URL](./images/BrowserPAC.png) + +To find the correct auto-configuration URL from Fiddler: + +1. Click **Tools > Options > Connections**. +2. Clicking the **Copy Browser Proxy Configuration URL** link. + +![Copy Auto-Correct URL](./images/CopyAutoCorrectURL.jpg) \ No newline at end of file diff --git a/configure-fiddler/capturing-traffic/configuredotnetapp.md b/configure-fiddler/capturing-traffic/configuredotnetapp.md new file mode 100644 index 0000000..d36ac36 --- /dev/null +++ b/configure-fiddler/capturing-traffic/configuredotnetapp.md @@ -0,0 +1,77 @@ +--- +title: Configure .NET applications +description: Configfure .NET Framework to automatically connect to Fiddler Classic +slug: DotNETConfig +publish: true +position: 6 +previous_url: /configure-fiddler/tasks/configuredotnetapp +--- + +# Configure .NET Applications + +To allow the .NET Framework to automatically connect to Fiddler, start Fiddler Classic before starting the .NET application. + +To temporarily connect a .NET application to Fiddler Classic, use the **GlobalProxySelection** class to set a proxy: + +```c# +System.Net.WebRequest.DefaultWebProxy = new System.Net.WebProxy("127.0.0.1", 8888); +``` + +Or, specify a proxy inside the **yourappname.exe.config** file. + ++ If the .NET application is running in your current user account, add the following content inside the configuration section: + + +```XML + + + + + + + +``` + +See [MSDN](https://msdn.microsoft.com/en-us/magazine/cc300743.aspx) for more on this topic. + ++ If the .NET application is running in a different user account (for example, a Windows service), edit the **machine.config** file: + +```XML + + + + + +``` + +Or, manually specify the proxy on an individual WebRequest object: + +```c# +objRequest = (HttpWebRequest)WebRequest.Create(url); +objRequest.Proxy= new WebProxy("127.0.0.1", 8888); +``` + +**Note:** Important: Regardless of other settings, .NET will always bypass the Fiddler Classic proxy for URLs containing localhost. So, rather than using localhost, change your code to refer to the machine name. For instance: + ++ This URL will not appear in Fiddler: +`http://localhost/X509SignCodeService/X509SigningService.asmx` + ++ This URL will appear in Fiddler: +`http://mymachine/X509SignCodeService/X509SigningService.asmx` + + +## Configure .NET Core Applications + +Setup the proxy via netsh tool in commmand line the following way + +see [Netsh Docs](https://docs.microsoft.com/en-us/windows-server/networking/technologies/netsh/netsh-contexts) for more info on this topic + +```bash +netsh winhttp set proxy 127.0.0.1:8888 +``` + +To remove the proxy use the following + +```bash +netsh winhttp reset proxy +``` \ No newline at end of file diff --git a/configure-fiddler/tasks/configurefiddlerforwin8.md b/configure-fiddler/capturing-traffic/configurefiddlerforwin8.md similarity index 55% rename from configure-fiddler/tasks/configurefiddlerforwin8.md rename to configure-fiddler/capturing-traffic/configurefiddlerforwin8.md index 0cc6b7f..c935356 100644 --- a/configure-fiddler/tasks/configurefiddlerforwin8.md +++ b/configure-fiddler/capturing-traffic/configurefiddlerforwin8.md @@ -4,12 +4,12 @@ description: Configure Fiddler Classic for Windows 8 Metro-style applications slug: Windows8Config publish: true position: 15 +previous_url: /configure-fiddler/tasks/configurefiddlerforwin8 --- -Configure Fiddler Classic for Windows 8 Metro-style applications -======================================================== +# Configure Fiddler Classic for Windows 8 Metro-style applications Follow two steps to configure Fiddler Classic for Windows 8: @@ -19,48 +19,35 @@ Follow two steps to configure Fiddler Classic for Windows 8: Create a Loopback Exemption --------------------------- -1. (Fiddler2 Only:) Install and launch the [EnableLoopback Utility][1] by clicking the **Win8 Config** button. - - ![Win8 Config Button][10] +1. (Fiddler2 Only:) Install and launch the [EnableLoopback Utility](https://www.telerik.com/fiddler/add-ons) by clicking the **Win8 Config** button. + ![Win8 Config Button](./images/Win8Config.png) 2. Check the box next to each application that will send traffic to Fiddler Classic. This requires Administrator privileges. - ![AppContainer Loopback Exemption Utility][3]. + ![AppContainer Loopback Exemption Utility](./images/AppContainerLoopbackExemptionUtility.png) Now these applications can send traffic to Fiddler Classic. -* To allow Unit Tests in Visual Studio 2012 to send traffic to Fiddler Classic, click the AppContainer Loopback Exemption Utility Refresh button while the Unit Test is running. An AppContainer for the Unit Test will appear. Check the box for this AppContainer. [Learn more][4]. +* To allow Unit Tests in Visual Studio 2012 to send traffic to Fiddler Classic, click the AppContainer Loopback Exemption Utility Refresh button while the Unit Test is running. An AppContainer for the Unit Test will appear. Check the box for this AppContainer. [Learn more](https://stackoverflow.com/questions/13360309/using-fiddler-with-windows-store-unit-test). -* An alternative to using the AppContainer Loopback Exemption Utility is to [declare the privateNetworkClientServer permission][5]. +* An alternative to using the AppContainer Loopback Exemption Utility is to [declare the privateNetworkClientServer permission](https://msdn.microsoft.com/en-us/library/windows/apps/br211380). Place Fiddler Root Certificate in the machine's Trusted Root store -------------------------------------------------------------------- 1. Enable Fiddler Classic HTTPS-decryption feature. A **Warning** dialog appears. Click **Yes** to trust the Fiddler Root certificate. - ![Warning dialog][6] + ![Warning dialog](./images/WarningDialogTrustFiddlerRootCert.png) 2. A Security Warning dialog appears. Click **Yes** to install the Fiddler Root certificate. - ![Security warning][7] + ![Security warning](./images/SecurityWarningInstallFiddlerRootCert.png) 3. The User Account Control dialog appears. Click **Yes** to place the Fiddler Root Certificate into the machine-wide Trusted Root Certification Authorities store. - ![User Account Control dialog][8] + ![User Account Control dialog](./images/UACDialog.png) 4. The TrustCert Confirmation dialog appears. Click **Yes**. - ![TrustCert Confirmation][9] - - -[1]: http://fiddler2.com/add-ons -[2]: ../../images/ModelDoc/ToolsMenuLoopbackExemptions.png "Fiddler Classic Tools menu" -[3]: ../../images/ModelDoc/AppContainerLoopbackExemptionUtility.png "AppContainer Loopback Exemption Utility" -[4]: https://stackoverflow.com/questions/13360309/using-fiddler-with-windows-store-unit-test -[5]: https://msdn.microsoft.com/en-us/library/windows/apps/br211380 -[6]: ../../images/ModelDoc/WarningDialogTrustFiddlerRootCert.png "Trust Fiddler Root certificate warning dialog" -[7]: ../../images/ModelDoc/SecurityWarningInstallFiddlerRootCert.png "Install Fiddler Root certificate security warning dialog" -[8]: ../../images/ModelDoc/UACDialog.png "User Account Control dialog" -[9]: ../../images/ModelDoc/TrustCertConfirmDialog.png "TrustCert Confirmation dialog" -[10]: ../../images/ConfigureForWin8/Win8Config.png "Win8 Config Button" + ![TrustCert Confirmation](./images/TrustCertConfirmDialog.png) \ No newline at end of file diff --git a/configure-fiddler/tasks/configureforandroid.md b/configure-fiddler/capturing-traffic/configureforandroid.md similarity index 74% rename from configure-fiddler/tasks/configureforandroid.md rename to configure-fiddler/capturing-traffic/configureforandroid.md index da15051..9e06b0b 100644 --- a/configure-fiddler/tasks/configureforandroid.md +++ b/configure-fiddler/capturing-traffic/configureforandroid.md @@ -4,16 +4,15 @@ description: Configure Fiddler Classic for Android Mobile Operating System slug: ConfigureForAndroid publish: true position: 18 +previous_url: /configure-fiddler/tasks/configureforandroid --- -Configure Fiddler Classic for Android Devices -================================================ +# Configure Fiddler Classic for Android Devices >tip Update: If you're looking for Fiddler for Android, check out the new [Fiddler Everywhere](https://www.telerik.com/fiddler/fiddler-everywhere)! Check this [blog post](https://www.telerik.com/blogs/new-release-fiddler-everywhere-3) to learn more about it or directly see how easy it is to [setup and use Fiddler Everywhere alongside Android device](https://docs.telerik.com/fiddler-everywhere/traffic/configure-android). -Configure Fiddler Classic ------------------ +## Configure Fiddler Classic 1. Click **Tools > Fiddler Options > Connections**. @@ -23,13 +22,12 @@ Configure Fiddler Classic 1. Hover over the **Online indicator** at the far right of the Fiddler toolbar to display the IP address of the Fiddler server. - ![Online Tooltip][1] + ![Online Tooltip](./images/OnlineTooltip.png) 1. Ensure that you have installed and using **BouncyCastle** as a certificate generator. Newer versions of Android will reject certificates with more than two years of validity, and currently, only the BouncyCastle generator will output a compatible certificate for Android devices. [Learn more about certificate generators and how to install and enable BouncyCastle here...](https://www.telerik.com/blogs/understanding-fiddler-certificate-generators). -Configure Android Device ----------------------- +## Configure Android Device 1. Swipe down from the top of the screen and tap the **Settings** icon. @@ -37,36 +35,33 @@ Configure Android Device 1. Tap and hold your current Wi-Fi network. Select **Modify Network**. - ![Modify Network][2] + ![Modify Network](./images/ModifyNetwork.png) 1. Tap the **Show advanced options** box. - ![Show advanced options][3] + ![Show advanced options](./images/ShowAdvancedOptions.png) 1. Tap the **Proxy settings** dropdown and select **Manual**. - ![Proxy settings][4] + ![Proxy settings](./images/ProxySettings.png) 1. Type the IP address and port (usually 8888) of the Fiddler server. - ![IP Address][5] + ![IP Address](./images/IPAddress.png) 1. Tap **Save**. To verify this configuration, go to **http://ipv4.fiddler:8888/**. Chrome should display the **Fiddler Echo Service** webpage, and the traffic should appear in Fiddler. -Disable the proxy ------------------ +## Disable the proxy After using Fiddler, return to the **Proxy Settings** screen above and remove the proxy. - -Decrypt HTTPS -------------- +## Decrypt HTTPS 1. On the **Fiddler Echo Service Webpage**, click the **FiddlerRoot Certificate** link. - ![Download FiddlerRoot Certificate][6] + ![Download FiddlerRoot Certificate](./images/DownloadFiddlerRootCert.png) >important Ensure that the Fiddler certificate is generated through the BouncyCastle certificate generator. @@ -76,7 +71,7 @@ Decrypt HTTPS 1. Under **Credential Storage**, tap **Install from storage**. - ![Install from storage][7] + ![Install from storage](./images/InstallFromStorage.png) 5. Tap the **FiddlerRoot.cer** file. @@ -84,15 +79,6 @@ Decrypt HTTPS To verify this configuration, tap **Trusted credentials > User**. This should display the Fiddler certificate. -Disable HTTPS Decryption ------------------------- - -To delete the FiddlerRoot certificate, tap **Trusted credentials > User** and delete the certificate. +## Disable HTTPS Decryption -[1]: ../../images/ConfigureForAndroid/OnlineTooltip.png -[2]: ../../images/ConfigureForAndroid/ModifyNetwork.png -[3]: ../../images/ConfigureForAndroid/ShowAdvancedOptions.png -[4]: ../../images/ConfigureForAndroid/ProxySettings.png -[5]: ../../images/ConfigureForAndroid/IPAddress.png -[6]: ../../images/ConfigureForAndroid/DownloadFiddlerRootCert.png -[7]: ../../images/ConfigureForAndroid/InstallFromStorage.png +To delete the FiddlerRoot certificate, tap **Trusted credentials > User** and delete the certificate. \ No newline at end of file diff --git a/configure-fiddler/tasks/configureforios.md b/configure-fiddler/capturing-traffic/configureforios.md similarity index 94% rename from configure-fiddler/tasks/configureforios.md rename to configure-fiddler/capturing-traffic/configureforios.md index d04216e..b02a9f5 100644 --- a/configure-fiddler/tasks/configureforios.md +++ b/configure-fiddler/capturing-traffic/configureforios.md @@ -4,13 +4,12 @@ description: The configuration steps needed to setup the classic Fiddler Classic slug: ConfigureForiOS publish: true position: 17 +previous_url: /configure-fiddler/tasks/configureforios --- -Capture Traffic from iOS Device -=============================== +# Capture Traffic from iOS Device -Configure Fiddler Classic ------------------ +## Configure Fiddler Classic 1. Open Fiddler Classic and stop capturing. @@ -38,9 +37,7 @@ Configure Fiddler Classic 1. For iPhone: Disable the 3g/4g connection. - -Set the iOS Device Proxy ------------------------- +## Set the iOS Device Proxy 1. On the iOS device open **_Settings > General > VPN & Device Management_** and remove all **DO_NOT_TRUST_FiddlerRoot** profiles. You must remove them (not disabling them). @@ -66,9 +63,7 @@ Set the iOS Device Proxy 1. (iOS 10.3+) Go to **_General > About > Certificate Trust Settings_** and **enable full trust** for the **DO_NOT_TRUST_FiddlerRoot** certificate. Note that you will see the **DO_NOT_TRUST_FiddlerRoot** certificate only after completing the previous step. - -Uninstall FiddlerRoot Certificate ---------------------------------- +## Uninstall FiddlerRoot Certificate If you decide to uninstall the root certificate: diff --git a/configure-fiddler/tasks/configureformac.md b/configure-fiddler/capturing-traffic/configureformac.md similarity index 78% rename from configure-fiddler/tasks/configureformac.md rename to configure-fiddler/capturing-traffic/configureformac.md index 291f870..99182db 100644 --- a/configure-fiddler/tasks/configureformac.md +++ b/configure-fiddler/capturing-traffic/configureformac.md @@ -4,18 +4,17 @@ description: Configure Fiddler Classic for Mac slug: ConfigureForMac publish: true position: 16 +previous_url: /configure-fiddler/tasks/configureformac --- -Configure Fiddler Classic for Mac -========================= +# Configure Fiddler Classic for Mac >tip Update: If you're looking for Fiddler for macOS, check out the new [Fiddler Everywhere](https://www.telerik.com/fiddler/fiddler-everywhere)! Check this [blog post](https://www.telerik.com/blogs/new-release-fiddler-everywhere-3) to learn more about it or directly see how easy is it to [setup and use Fiddler Everywhere on macOS](http://docs.telerik.com/fiddler-everywhere/get-started/quickstart-macos.html). Virtualization products like VMWare Fusion or Parallels Desktop permit Fiddler to run in a virtual machine on your Mac. -Configure the Virtual Machine ------------------------------ +## Configure the Virtual Machine 1. Install Parallels. @@ -23,8 +22,7 @@ Configure the Virtual Machine 3. Restart the Virtual Machine. -Configure Fiddler Classic -------------------------- +## Configure Fiddler Classic 1. Install Fiddler Classic on the Virtual Machine. @@ -34,18 +32,17 @@ Configure Fiddler Classic 4. Click the checkbox by **Allow remote computers to connect**. - ![Allow remote computers to connect][1] + ![Allow remote computers to connect](./images/AllowRemoteComputersToConnect.png) 5. Restart Fiddler. 6. Ensure your firewall allows incoming connections to the Fiddler Classic process. -Configure Mac -------------- +## Configure Mac 1. Hover over the **Online indicator** at the far right of the Fiddler Classic toolbar to display the IP addresses assigned to the virtual machine. - ![Online Tooltip][2] + ![Online Tooltip](./images/OnlineTooltip.png) 2. Click the **Apple Menu**. @@ -59,10 +56,6 @@ Configure Mac 7. Enable the **Web Proxy** (HTTP) and **Secure Web Proxy** (HTTPS) options to point to the IPv4 address of the virtual machine using port 8888. -Disable After Use ------------------ +## Disable After Use -After using Fiddler, return to the **OSX System Preferences** and disable the proxy settings. - -[1]: ../../images/ConfigureForMac/AllowRemoteComputersToConnect.png -[2]: ../../images/ConfigureForMac/OnlineTooltip.png +After using Fiddler, return to the **OSX System Preferences** and disable the proxy settings. \ No newline at end of file diff --git a/configure-fiddler/capturing-traffic/configurejavaapp.md b/configure-fiddler/capturing-traffic/configurejavaapp.md new file mode 100644 index 0000000..b600fa0 --- /dev/null +++ b/configure-fiddler/capturing-traffic/configurejavaapp.md @@ -0,0 +1,39 @@ +--- +title: Configure a Java application +description: Configure a Java Application alongside Fiddler Classic proxy +slug: ConfigureJavaApp +publish: true +position: 8 +previous_url: /configure-fiddler/tasks/configurejavaapp +--- + +# Configure a Java Application to Use Fiddler +=========================================== + +To configure a Java application to send web traffic to Fiddler, set the proxy using **jre**: + +```bash +jre -DproxySet=true -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888 +``` + +Or: +```bash +jre -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888 MyApp +``` + +Or, change the Java Virtual Machine's proxy settings programmatically: + +```c# +System.setProperty("http.proxyHost", "127.0.0.1"); +System.setProperty("https.proxyHost", "127.0.0.1"); +System.setProperty("http.proxyPort", "8888"); +System.setProperty("https.proxyPort", "8888"); +``` + +For the seamless experience in Windows you may consider adding + +```c# +System.setProperty("javax.net.ssl.trustStoreType","Windows-ROOT"); +``` + +[Learn more about Java proxy settings.](https://java.sun.com/j2se/1.5.0/docs/guide/net/proxies.html) \ No newline at end of file diff --git a/configure-fiddler/tasks/configurephpcurl.md b/configure-fiddler/capturing-traffic/configurephpcurl.md similarity index 66% rename from configure-fiddler/tasks/configurephpcurl.md rename to configure-fiddler/capturing-traffic/configurephpcurl.md index c7f2435..84b246d 100644 --- a/configure-fiddler/tasks/configurephpcurl.md +++ b/configure-fiddler/capturing-traffic/configurephpcurl.md @@ -4,16 +4,20 @@ description: Configure a PHP/cURL application alongside the Fiddler Classic prox slug: PHPcURL publish: true position: 7 +previous_url: /configure-fiddler/tasks/configurephpcurl --- -Configure a PHP/cURL Application to Use Fiddler -=============================================== +# Configure a PHP/cURL Application to Use Fiddler To configure a PHP/cURL application to send web traffic to Fiddler Classic, add this line of code before the application sends requests, where $ch is the handle returned by curl_init(): - curl_setopt($ch, CURLOPT_PROXY, '127.0.0.1:8888'); +```bash +curl_setopt($ch, CURLOPT_PROXY, '127.0.0.1:8888'); +``` Or, enter this command from the command line: - curl --proxy 127.0.0.1:8888 +```bash +curl --proxy 127.0.0.1:8888 +``` diff --git a/configure-fiddler/tasks/configurewinhttpapp.md b/configure-fiddler/capturing-traffic/configurewinhttpapp.md similarity index 70% rename from configure-fiddler/tasks/configurewinhttpapp.md rename to configure-fiddler/capturing-traffic/configurewinhttpapp.md index 5e4025c..6e07120 100644 --- a/configure-fiddler/tasks/configurewinhttpapp.md +++ b/configure-fiddler/capturing-traffic/configurewinhttpapp.md @@ -4,24 +4,30 @@ description: Configure a WinHTTP application alongside the Fiddler Classic proxy slug: ConfigureWinHTTPApp publish: true position: 9 +previous_url: /configure-fiddler/tasks/configurewinhttpapp --- -Configure a WinHTTP Application to Use Fiddler Classic -===================================================== +# Configure a WinHTTP Application to Use Fiddler Classic To configure a WinHTTP application to send web traffic to Fiddler Classic, enter this command from the command line: **Windows Vista or above** (Requires an Elevated/Admin command prompt): - netsh winhttp set proxy 127.0.0.1:8888 +```bash +netsh winhttp set proxy 127.0.0.1:8888 +``` On Windows 7 or earlier, run the above command in 32bit NETSH to configure 32bit WinHTTP hosts, and run the command in 64bit NETSH to configure 64bit WinHTTP hosts. **Windows XP or below**: - proxycfg -p http=127.0.0.1:8888;https=127.0.0.1:8888 +```bash +proxycfg -p http=127.0.0.1:8888;https=127.0.0.1:8888 +``` Or: (Forces WinHTTP to use WinINET's proxy settings) - proxycfg -u +```bash +proxycfg -u +``` diff --git a/configure-fiddler/tasks/firefoxhttps.md b/configure-fiddler/capturing-traffic/firefoxhttps.md similarity index 86% rename from configure-fiddler/tasks/firefoxhttps.md rename to configure-fiddler/capturing-traffic/firefoxhttps.md index 8aa675d..dd1079f 100644 --- a/configure-fiddler/tasks/firefoxhttps.md +++ b/configure-fiddler/capturing-traffic/firefoxhttps.md @@ -4,11 +4,11 @@ description: "Learn how to explicitly set Firefox to trust the Fiddler certifica slug: FirefoxHTTPS publish: true position: 24 +previous_url: /configure-fiddler/tasks/firefoxhttps --- # Capture HTTPS traffic from Firefox - ## Configure Fiddler Classic 1. Click **Tools > Options**. @@ -17,14 +17,11 @@ position: 24 3. Click the **Export Fiddler Root Certificate to Desktop** button. - ![Export Root Certificate to Desktop](../../images/ConfigureBrowsers/ExportRootCertificateToDesktop.png) - - ## Configure Firefox - Open **Firefox > Settings > Network Settings**, choose **Manual Proxy Configuration** and enter the Fiddler proxy address as HTTP and HTTP(S) proxy. - ![Setting Fiddler proxy explicitly through the manual proxy configuration](../../images/FirefoxHTTPS/firefox-manual-proxy-settings.png) + ![Setting Fiddler proxy explicitly through the manual proxy configuration](./images/firefox-manual-proxy-settings.png) >tip Note that newer Firefox versions already respect the system proxy by default (**Use system proxy settings** is selected by default). Use the manual configuration only if you need to capture Firefox traffic only and you would like to avoid polluting the captured sessions with system traffic. @@ -46,6 +43,6 @@ position: 24 1. Fully trust the Fiddler CA. - ![Fully trusting the Fiddler CA in the Firefox certificate manager](../../images/FirefoxHTTPS/firefox-certificate-manager-trust.png) + ![Fully trusting the Fiddler CA in the Firefox certificate manager](./images/firefox-certificate-manager-trust.png) diff --git a/images/MonitorRemoteMachine/AllowRemoteComputersToConnect.png b/configure-fiddler/capturing-traffic/images/AllowRemoteComputersToConnect copy.png similarity index 100% rename from images/MonitorRemoteMachine/AllowRemoteComputersToConnect.png rename to configure-fiddler/capturing-traffic/images/AllowRemoteComputersToConnect copy.png diff --git a/images/MonitorWindowsPhone7/AllowRemoteComputersToConnect.png b/configure-fiddler/capturing-traffic/images/AllowRemoteComputersToConnect.png similarity index 100% rename from images/MonitorWindowsPhone7/AllowRemoteComputersToConnect.png rename to configure-fiddler/capturing-traffic/images/AllowRemoteComputersToConnect.png diff --git a/images/ModelDoc/AppContainerLoopbackExemptionUtility.png b/configure-fiddler/capturing-traffic/images/AppContainerLoopbackExemptionUtility.png similarity index 100% rename from images/ModelDoc/AppContainerLoopbackExemptionUtility.png rename to configure-fiddler/capturing-traffic/images/AppContainerLoopbackExemptionUtility.png diff --git a/images/ConfigureBrowsers/BrowserPAC.png b/configure-fiddler/capturing-traffic/images/BrowserPAC.png similarity index 100% rename from images/ConfigureBrowsers/BrowserPAC.png rename to configure-fiddler/capturing-traffic/images/BrowserPAC.png diff --git a/images/ConfigureBrowsers/CopyAutoCorrectURL.jpg b/configure-fiddler/capturing-traffic/images/CopyAutoCorrectURL.jpg similarity index 100% rename from images/ConfigureBrowsers/CopyAutoCorrectURL.jpg rename to configure-fiddler/capturing-traffic/images/CopyAutoCorrectURL.jpg diff --git a/images/ConfigureForAndroid/DownloadFiddlerRootCert.png b/configure-fiddler/capturing-traffic/images/DownloadFiddlerRootCert.png similarity index 100% rename from images/ConfigureForAndroid/DownloadFiddlerRootCert.png rename to configure-fiddler/capturing-traffic/images/DownloadFiddlerRootCert.png diff --git a/images/FirefoxHTTPS/FiddlerHookImport.png b/configure-fiddler/capturing-traffic/images/FiddlerHookImport.png similarity index 100% rename from images/FirefoxHTTPS/FiddlerHookImport.png rename to configure-fiddler/capturing-traffic/images/FiddlerHookImport.png diff --git a/images/ConfigureBrowsers/FirefoxProxyError.png b/configure-fiddler/capturing-traffic/images/FirefoxProxyError.png similarity index 100% rename from images/ConfigureBrowsers/FirefoxProxyError.png rename to configure-fiddler/capturing-traffic/images/FirefoxProxyError.png diff --git a/images/ConfigureForAndroid/IPAddress.png b/configure-fiddler/capturing-traffic/images/IPAddress.png similarity index 100% rename from images/ConfigureForAndroid/IPAddress.png rename to configure-fiddler/capturing-traffic/images/IPAddress.png diff --git a/images/ConfigureForAndroid/InstallFromStorage.png b/configure-fiddler/capturing-traffic/images/InstallFromStorage.png similarity index 100% rename from images/ConfigureForAndroid/InstallFromStorage.png rename to configure-fiddler/capturing-traffic/images/InstallFromStorage.png diff --git a/images/ConfigureForAndroid/ModifyNetwork.png b/configure-fiddler/capturing-traffic/images/ModifyNetwork.png similarity index 100% rename from images/ConfigureForAndroid/ModifyNetwork.png rename to configure-fiddler/capturing-traffic/images/ModifyNetwork.png diff --git a/images/ConfigureForAndroid/OnlineTooltip.png b/configure-fiddler/capturing-traffic/images/OnlineTooltip copy.png similarity index 100% rename from images/ConfigureForAndroid/OnlineTooltip.png rename to configure-fiddler/capturing-traffic/images/OnlineTooltip copy.png diff --git a/images/ConfigureForMac/OnlineTooltip.png b/configure-fiddler/capturing-traffic/images/OnlineTooltip.png similarity index 100% rename from images/ConfigureForMac/OnlineTooltip.png rename to configure-fiddler/capturing-traffic/images/OnlineTooltip.png diff --git a/images/ConfigureForAndroid/ProxySettings.png b/configure-fiddler/capturing-traffic/images/ProxySettings.png similarity index 100% rename from images/ConfigureForAndroid/ProxySettings.png rename to configure-fiddler/capturing-traffic/images/ProxySettings.png diff --git a/images/ModelDoc/SecurityWarningInstallFiddlerRootCert.png b/configure-fiddler/capturing-traffic/images/SecurityWarningInstallFiddlerRootCert.png similarity index 100% rename from images/ModelDoc/SecurityWarningInstallFiddlerRootCert.png rename to configure-fiddler/capturing-traffic/images/SecurityWarningInstallFiddlerRootCert.png diff --git a/images/MonitorRemoteMachine/SetProxyAddress.jpg b/configure-fiddler/capturing-traffic/images/SetProxyAddress.jpg similarity index 100% rename from images/MonitorRemoteMachine/SetProxyAddress.jpg rename to configure-fiddler/capturing-traffic/images/SetProxyAddress.jpg diff --git a/images/ConfigureForAndroid/ShowAdvancedOptions.png b/configure-fiddler/capturing-traffic/images/ShowAdvancedOptions.png similarity index 100% rename from images/ConfigureForAndroid/ShowAdvancedOptions.png rename to configure-fiddler/capturing-traffic/images/ShowAdvancedOptions.png diff --git a/images/ModelDoc/ToolsMenuLoopbackExemptions.png b/configure-fiddler/capturing-traffic/images/ToolsMenuLoopbackExemptions.png similarity index 100% rename from images/ModelDoc/ToolsMenuLoopbackExemptions.png rename to configure-fiddler/capturing-traffic/images/ToolsMenuLoopbackExemptions.png diff --git a/images/ModelDoc/TrustCertConfirmDialog.png b/configure-fiddler/capturing-traffic/images/TrustCertConfirmDialog.png similarity index 100% rename from images/ModelDoc/TrustCertConfirmDialog.png rename to configure-fiddler/capturing-traffic/images/TrustCertConfirmDialog.png diff --git a/images/FirefoxHTTPS/TrustFiddlerRoot.png b/configure-fiddler/capturing-traffic/images/TrustFiddlerRoot.png similarity index 100% rename from images/FirefoxHTTPS/TrustFiddlerRoot.png rename to configure-fiddler/capturing-traffic/images/TrustFiddlerRoot.png diff --git a/images/ModelDoc/UACDialog.png b/configure-fiddler/capturing-traffic/images/UACDialog.png similarity index 100% rename from images/ModelDoc/UACDialog.png rename to configure-fiddler/capturing-traffic/images/UACDialog.png diff --git a/images/ConfigureBrowsers/UseSystemProxySettings.png b/configure-fiddler/capturing-traffic/images/UseSystemProxySettings.png similarity index 100% rename from images/ConfigureBrowsers/UseSystemProxySettings.png rename to configure-fiddler/capturing-traffic/images/UseSystemProxySettings.png diff --git a/images/ModelDoc/WarningDialogTrustFiddlerRootCert.png b/configure-fiddler/capturing-traffic/images/WarningDialogTrustFiddlerRootCert.png similarity index 100% rename from images/ModelDoc/WarningDialogTrustFiddlerRootCert.png rename to configure-fiddler/capturing-traffic/images/WarningDialogTrustFiddlerRootCert.png diff --git a/images/ConfigureForWin8/Win8Config.png b/configure-fiddler/capturing-traffic/images/Win8Config.png similarity index 100% rename from images/ConfigureForWin8/Win8Config.png rename to configure-fiddler/capturing-traffic/images/Win8Config.png diff --git a/images/FirefoxHTTPS/firefox-certificate-manager-trust.png b/configure-fiddler/capturing-traffic/images/firefox-certificate-manager-trust.png similarity index 100% rename from images/FirefoxHTTPS/firefox-certificate-manager-trust.png rename to configure-fiddler/capturing-traffic/images/firefox-certificate-manager-trust.png diff --git a/images/FirefoxHTTPS/firefox-manual-proxy-settings.png b/configure-fiddler/capturing-traffic/images/firefox-manual-proxy-settings.png similarity index 100% rename from images/FirefoxHTTPS/firefox-manual-proxy-settings.png rename to configure-fiddler/capturing-traffic/images/firefox-manual-proxy-settings.png diff --git a/configure-fiddler/tasks/monitorlocaltraffic.md b/configure-fiddler/capturing-traffic/monitorlocaltraffic.md similarity index 61% rename from configure-fiddler/tasks/monitorlocaltraffic.md rename to configure-fiddler/capturing-traffic/monitorlocaltraffic.md index 7d1570a..731a5df 100644 --- a/configure-fiddler/tasks/monitorlocaltraffic.md +++ b/configure-fiddler/capturing-traffic/monitorlocaltraffic.md @@ -4,10 +4,10 @@ description: "Configure Fiddler Classic to capture local machine traffic - manag slug: MonitorLocalTraffic publish: true position: 22 +previous_url: /configure-fiddler/tasks/mointorlocaltraffic --- -Monitor traffic to localhost from IE or .NET -============================================ +# Monitor traffic to localhost from IE or .NET To monitor traffic sent to **http://localhost** or **http://127.0.0.1** from IE8 or below or the .NET Framework: @@ -15,31 +15,37 @@ To monitor traffic sent to **http://localhost** or **http://127.0.0.1** from IE8 For example, instead of - http://localhost:8081/mytestpage.aspx +```txt +http://localhost:8081/mytestpage.aspx +``` Go to: - http://machinename:8081/mytestpage.aspx +```txt +http://machinename:8081/mytestpage.aspx +``` + Use one of these addresses: -To use the IPv4 adapter (recommended for the Visual Studio test webserver, codename: Cassini): - http://ipv4.fiddler + `http://ipv4.fiddler` -To use the IPv6 adapter: - http://ipv6.fiddler + `http://ipv6.fiddler` -To use localhost in the Host header: - http://localhost.fiddler + `http://localhost.fiddler` + Click **Rules > Customize Rules...** and add this code to the Rules file: - static function OnBeforeRequest(oSession:Fiddler.Session){ - if (oSession.HostnameIs("MYAPP")) { oSession.host = "127.0.0.1:8081"; } - } +```c# +static function OnBeforeRequest(oSession:Fiddler.Session){ +if (oSession.HostnameIs("MYAPP")) { oSession.host = "127.0.0.1:8081"; } +} +``` - Now, **http://myapp** will act as an alias for **127.0.0.1:8081** +Now, `http://myapp` will act as an alias for `127.0.0.1:8081` diff --git a/configure-fiddler/tasks/monitorremotemachine.md b/configure-fiddler/capturing-traffic/monitorremotemachine.md similarity index 55% rename from configure-fiddler/tasks/monitorremotemachine.md rename to configure-fiddler/capturing-traffic/monitorremotemachine.md index 1428ba7..29a33ad 100644 --- a/configure-fiddler/tasks/monitorremotemachine.md +++ b/configure-fiddler/capturing-traffic/monitorremotemachine.md @@ -4,30 +4,23 @@ description: "Configure Fiddler Classic to capture traffic from a remote machine slug: MonitorRemoteMachine publish: true position: 11 +previous_url: /configure-fiddler/tasks/mointorremotemachine --- -Capture Traffic from Another Machine (Any OS) -============================================= +# Capture Traffic from Another Machine (Any OS) -Set Remote Machine Proxy Settings ---------------------------------- +## Set Remote Machine Proxy Settings 1. Start Fiddler Classic on the Fiddler server (the machine that will capture the traffic). 2. Click **Tools > Options**. Ensure **Allow remote clients to connect** is checked. - ![Allow remote clients to connect][1] + ![Allow remote clients to connect](./images/AllowRemoteComputersToConnect.png) 3. On the other machine, set the proxy settings to the machine name of the Fiddler server at port 8888. - ![Set proxy address][2] + ![Set proxy address](./images/SetProxyAddress.jpg) -Decrypt HTTPS traffic from the Remote Machine ---------------------------------------------- +## Decrypt HTTPS traffic from the Remote Machine -Configure the remote machine to [trust the FiddlerRoot certificate][3]. - - -[1]: ../../images/MonitorRemoteMachine/AllowRemoteComputersToConnect.png -[2]: ../../images/MonitorRemoteMachine/SetProxyAddress.jpg -[3]: ./TrustFiddlerRootCert +Configure the remote machine to [trust the FiddlerRoot certificate](slug://TrustFiddlerRootCert) \ No newline at end of file diff --git a/configure-fiddler/tasks/decrypthttps.md b/configure-fiddler/decrypthttps.md similarity index 59% rename from configure-fiddler/tasks/decrypthttps.md rename to configure-fiddler/decrypthttps.md index c98a311..c3d1b0d 100644 --- a/configure-fiddler/tasks/decrypthttps.md +++ b/configure-fiddler/decrypthttps.md @@ -3,63 +3,53 @@ title: Decrypt HTTPS traffic description: Configure Fiddler Classic to decrypt HTTPS traffic slug: DecryptHTTPS publish: true -position: 3 +position: 20 --- -Configure Fiddler Classic to Decrypt HTTPS Traffic -========================================== +# Configure Fiddler Classic to Decrypt HTTPS Traffic >tip Update: If you're looking for cross-platform HTTPS capturing and decrypting tool, check out the new [Fiddler Everywhere](https://www.telerik.com/fiddler/fiddler-everywhere)! Check this [blog post](https://www.telerik.com/blogs/new-release-fiddler-everywhere-3) to learn more about it or directly see how easy is to [capture](https://docs.telerik.com/fiddler-everywhere/traffic/capture-traffic) and [inspect](https://docs.telerik.com/fiddler-everywhere/traffic/inspect-traffic) HTTPS traffic with Fiddler Everywhere. - - By default, Fiddler Classic does not capture and decrypt secure HTTPS traffic. To capture data sent through HTTPS, enable HTTPS traffic decryption. -Enable HTTPS traffic decryption --------------------------------- +## Enable HTTPS traffic decryption 1. Click **Tools > Options > HTTPS**. - 2. Click the **Decrypt HTTPS Traffic** box. + ![Fiddler Options -- Decrypt HTTPS Traffic](./images/DecryptHTTPSTrafficOption.png) - ![Fiddler Options -- Decrypt HTTPS Traffic][1] - -Skip traffic decryption for a specific host -------------------------------------------- +## Skip traffic decryption for a specific host 1. Click **Tools > Options > HTTPS**. - 2. Type the hostname in the **Skip Decryption**. + ![Skip Decryption](./images/SkipDecryption.png) - ![Skip Decryption][2] - -Skip traffic decryption for an application ------------------------------------------- +## Skip traffic decryption for an application To skip traffic decryption for a specific application or to decrypt HTTPS traffic only from a single host, you must modify the OnBeforeRequest function in the [FiddlerScript](https://www.telerik.com/blogs/understanding-fiddlerscript). Add a rule like this inside the [OnBeforeRequest function](https://docs.telerik.com/fiddler/knowledge-base/fiddlerscript/modifyrequestorresponse): - if (oSession.HTTPMethodIs("CONNECT") && oSession["X-PROCESSINFO"] && oSession["X-PROCESSINFO"].StartsWith("outlook")) - { - oSession["x-no-decrypt"] = "boring process"; - } +```C# +if (oSession.HTTPMethodIs("CONNECT") && oSession["X-PROCESSINFO"] && oSession["X-PROCESSINFO"].StartsWith("outlook")) +{ + oSession["x-no-decrypt"] = "boring process"; +} +``` -Decrypt traffic from one hostname only ---------------------------------------- +## Decrypt traffic from one hostname only Add a rule like this inside the [OnBeforeRequest function](https://docs.telerik.com/fiddler/knowledge-base/fiddlerscript/modifyrequestorresponse): - if (oSession.HTTPMethodIs("CONNECT") && - !oSession.HostnameIs("SiteICareAbout.com")) - { - oSession["x-no-decrypt"] = "do not care."; - } +```c# +if (oSession.HTTPMethodIs("CONNECT") && + !oSession.HostnameIs("SiteICareAbout.com")) +{ + oSession["x-no-decrypt"] = "do not care."; +} +``` + +## See Also -See also --------- -[Responding to requests with client certificates][3] +[Responding to requests with client certificates](slug://RespondWithClientCert) -[1]: ../../images/DecryptHTTPS/DecryptHTTPSTrafficOption.png -[2]: ../../images/DecryptHTTPS/SkipDecryption.png -[3]: ./RespondWithClientCert diff --git a/images/ConfigureFiddler/AgreetoLicenseAgreement.png b/configure-fiddler/images/AgreetoLicenseAgreement.png similarity index 100% rename from images/ConfigureFiddler/AgreetoLicenseAgreement.png rename to configure-fiddler/images/AgreetoLicenseAgreement.png diff --git a/images/DecryptHTTPS/DecryptHTTPSTrafficOption.png b/configure-fiddler/images/DecryptHTTPSTrafficOption.png similarity index 100% rename from images/DecryptHTTPS/DecryptHTTPSTrafficOption.png rename to configure-fiddler/images/DecryptHTTPSTrafficOption.png diff --git a/images/ConfigureBrowsers/ExportRootCertificateToDesktop.png b/configure-fiddler/images/ExportRootCertificateToDesktop.png similarity index 100% rename from images/ConfigureBrowsers/ExportRootCertificateToDesktop.png rename to configure-fiddler/images/ExportRootCertificateToDesktop.png diff --git a/images/ConfigureFiddler/FiddlerSetupCompleted.png b/configure-fiddler/images/FiddlerSetupCompleted.png similarity index 100% rename from images/ConfigureFiddler/FiddlerSetupCompleted.png rename to configure-fiddler/images/FiddlerSetupCompleted.png diff --git a/images/ConfigureBrowsers/ImportCertificate.png b/configure-fiddler/images/ImportCertificate.png similarity index 100% rename from images/ConfigureBrowsers/ImportCertificate.png rename to configure-fiddler/images/ImportCertificate.png diff --git a/images/TrustFiddlerRootCert/InstallThisCert.png b/configure-fiddler/images/InstallThisCert.png similarity index 100% rename from images/TrustFiddlerRootCert/InstallThisCert.png rename to configure-fiddler/images/InstallThisCert.png diff --git a/images/ConfigureFiddler/SelectInstallDirectory.png b/configure-fiddler/images/SelectInstallDirectory.png similarity index 100% rename from images/ConfigureFiddler/SelectInstallDirectory.png rename to configure-fiddler/images/SelectInstallDirectory.png diff --git a/images/ConfigureFiddler/SetupSecurityWarning.png b/configure-fiddler/images/SetupSecurityWarning.png similarity index 100% rename from images/ConfigureFiddler/SetupSecurityWarning.png rename to configure-fiddler/images/SetupSecurityWarning.png diff --git a/images/DecryptHTTPS/SkipDecryption.png b/configure-fiddler/images/SkipDecryption.png similarity index 100% rename from images/DecryptHTTPS/SkipDecryption.png rename to configure-fiddler/images/SkipDecryption.png diff --git a/images/TrustFiddlerRootCert/TrustFiddlerRootCert.png b/configure-fiddler/images/TrustFiddlerRootCert.png similarity index 100% rename from images/TrustFiddlerRootCert/TrustFiddlerRootCert.png rename to configure-fiddler/images/TrustFiddlerRootCert.png diff --git a/images/ConfigureBrowsers/TrustThisCAToIdentifyWebsites.png b/configure-fiddler/images/TrustThisCAToIdentifyWebsites.png similarity index 100% rename from images/ConfigureBrowsers/TrustThisCAToIdentifyWebsites.png rename to configure-fiddler/images/TrustThisCAToIdentifyWebsites.png diff --git a/configure-fiddler/tasks/installfiddler.md b/configure-fiddler/installfiddler.md similarity index 59% rename from configure-fiddler/tasks/installfiddler.md rename to configure-fiddler/installfiddler.md index 0622e45..27083b6 100644 --- a/configure-fiddler/tasks/installfiddler.md +++ b/configure-fiddler/installfiddler.md @@ -3,50 +3,32 @@ title: Using Fiddler description: Instructions for installing the Fiddler Classic proxy tool slug: UsingFiddler publish: true -position: 0 +position: 10 +previous_url: /tasks/installfiddler --- - # Using Fiddler - Download the Fiddler product: - * Download the latest version of [Fiddler Classic (Windows only)](https://www.telerik.com/download/fiddler). - * Download the latest version of [Fiddler Everywhere supported on Windows, macOS, and Linux](https://www.telerik.com/download/fiddler-everywhere) - - * Download the [FiddlerCap](https://www.telerik.com/fiddler/fiddlercap) application for quick web traffic capturing. - - -- Install Fiddler Classic - +- Install **Fiddler Classic** - Select **Run** from any Security Warning dialog. - - ![Setup Security Warning](../../images/ConfigureFiddler/SetupSecurityWarning.png) - + ![Setup Security Warning](./images/setupsecuritywarning.png) - Agree to the License Agreement. - - ![Agree to License Agreement](../../images/ConfigureFiddler/AgreetoLicenseAgreement.png) - + ![Agree to License Agreement](./images/AgreetoLicenseAgreement.png) - Select the install directory for Fiddler. - - ![Select Install Directory](../../images/ConfigureFiddler/SelectInstallDirectory.png) - + ![Select Install Directory](./images/SelectInstallDirectory.png) - Click **Close** when installation completes. - - ![Fiddler Classic Setup Completed](../../images/ConfigureFiddler/FiddlerSetupCompleted.png) - - -- Install Fiddler Everywhere - - - Fiddler Everywhere is a modern proxy tool with cross-platform Windows, macOS, and Linux support. Apart from being a local MITM proxy, it also provides collaboration functionalities, capabilities to save and store data in the cloud, HTTP/2 and TLS 1.3 support, and many more! [Learn more on how to install and use Fiddler Everywhere here...](https://docs.telerik.com/fiddler-everywhere/installation-and-update/installation-procedure) - + ![Fiddler Classic Setup Completed](./images/FiddlerSetupCompleted.png) +- Install **Fiddler Everywhere** + - Fiddler Everywhere is a modern proxy tool with cross-platform Windows, macOS, and Linux support. Apart from being a local MITM proxy, it also provides collaboration functionalities, capabilities to save and store data in the cloud, HTTP/2 and TLS 1.3 support, and many more! [Learn more on how to install and use Fiddler Everywhere here...](https://docs.telerik.com/fiddler-everywhere/installation-and-setup/quickstart-windows) - Start the desired Fiddler application and begin your network debugging journey. ## Additional Resources -- [Configure Fiddler Classic]({%slug ConfigureFiddler%}) -- [Configure your web browser to use Fiddler Classic]({%slug ConfigureBrowsers%}) -- [Capture traffic on Windows with Fiddler Classic]({%slug ViewWebTraffic%}) +- [Configure Fiddler Classic](slug://ConfigureFiddler) +- [Configure your web browser to use Fiddler Classic](slug://ConfigureBrowsers) +- [Capture traffic on Windows with Fiddler Classic](slug://ViewWebTraffic) - [Capture traffic on macOS, Linux and Windows with the new **Fiddler Everywhere**](https://docs.telerik.com/fiddler-everywhere) diff --git a/configure-fiddler/respondwithclientcert.md b/configure-fiddler/respondwithclientcert.md new file mode 100644 index 0000000..d0a6f09 --- /dev/null +++ b/configure-fiddler/respondwithclientcert.md @@ -0,0 +1,27 @@ +--- +title: Using Client Certificates +description: Respond to a HTTP requests that require the usage of specific client certificates. +slug: RespondWithClientCert +publish: true +position: 35 +--- + +# Using Client Certificates + +To specify the .CER file for Fiddler Classic to return for a given session, add this FiddlerScript*: + +```c# +oSession["https-Client-Certificate"] = "C:\\test\\someCert.cer"; +``` + +To specify a .CER file for Fiddler Classic to return otherwise, place that .CER file in: + +```bash +%USERPROFILE%\My Documents\Fiddler2\ClientCertificate.cer +``` + +To generate a .CER file: + +1. [Install the certificate in the Current User's Personal Certificate Store](https://msdn.microsoft.com/en-us/library/windows/hardware/ff546307(v=vs.85).aspx). +1. Right-click the certificate in **Personal Certificates Store**. +1. Click **All Tasks > Export...**. diff --git a/configure-fiddler/tasks/authenticatewithcbt.md b/configure-fiddler/tasks/authenticatewithcbt.md deleted file mode 100644 index aab7847..0000000 --- a/configure-fiddler/tasks/authenticatewithcbt.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Authentication to CBT-Protected Server -description: Configure Fiddler Classic to Authenticate to CBT-Protected Server -slug: AuthenticateWithCBT -publish: true -position: 21 ---- - -Configure Fiddler Classic to Authenticate to CBT-Protected Server -========================================================= - -1. Click **Rules > Customize Rules**. - -2. Scroll to the **OnPeekAtResponseHeaders** function. - -3. Add the following code: - - static function OnPeekAtResponseHeaders(oSession: Session) - { - // To avoid problems with Channel-Binding-Tokens, this block allows Fiddler Classic - // itself to respond to Authentication challenges from HTTPS Intranet sites. - if (oSession.isHTTPS && - (oSession.responseCode == 401) && - // Only permit auto-auth for local apps (e.g. not devices or remote PCs) - (oSession.LocalProcessID > 0) && - // Only permit auth to sites we trust - (Utilities.isPlainHostName(oSession.hostname) - // Replace telerik.com with whatever servers Fiddler Classic should release credentials to. - || oSession.host.EndsWith("telerik.com")) - ) - { - // To use creds other than your Windows login credentials, - // set X-AutoAuth to "domain\\username:password" - // Replace default with specific credentials in this format: - // domain\\username:password. - oSession["X-AutoAuth"] = "(default)"; - oSession["ui-backcolor"] = "pink"; - } - - //... function continues - - + Replace "telerik.com" with whatever servers Fiddler Classic should release credentials to. By default, Fiddler Classic will release credentials to any intranet sites (sites without a dot in the hostname). - - + Replace "default" with specific credentials in this format: - - domain\\username:password - - + If you specify "(default)", Fiddler Classic will attempt to use the login credentials of whatever user-account that it is running under. diff --git a/configure-fiddler/tasks/configurebrowsers.md b/configure-fiddler/tasks/configurebrowsers.md deleted file mode 100644 index 98e3996..0000000 --- a/configure-fiddler/tasks/configurebrowsers.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Capture Configuration for Browsers -description: Specific configuration steps for enabling capture on Opera, Firefox, and other non-Chromium browsers. -slug: ConfigureBrowsers -publish: true -position: 2 ---- - -Configure Browsers -================== - -Clear Cache ------------ - -To ensure all requests are sent and captured, [clear your browser's cache][7] before beginning a capture. - -IE, Chrome, Safari, and Opera ------------------------------ -+ To capture traffic from most browsers, enable **File > Capture Traffic**. - -+ [Record traffic sent to **http://localhost** or **htp://127.0.0.1** from IE][6]. - -+ To capture traffic from **Opera**, start Fiddler before starting Opera. - -Firefox -------- - -+ To capture HTTP traffic from **Firefox 4+**, either: - - + Click **Tools > Monitor with Fiddler > Use Fiddler automatically** to configure with [FiddlerHook][8], or - - + Click **Tools > Options > Advanced > Network > Settings > Use System Proxy Settings**. - - ![Use System Proxy Settings][10] - -+ [Capture HTTPS traffic from Firefox][9] - -Manual Configuration --------------------- - -To manually configure any browser to send traffic to Fiddler, set the browser to connect to a proxy server. This setting is usually in the **Options** or **Preferences** menu. Use these settings: - -Address: **127.0.0.1** -Port: **8888** - -Note: If a browser uses these settings, revert these settings after you close Fiddler, or the browser will not load pages. For example, Firefox will show the following error message: - -![Firefox Proxy Error][11] - -To instead allow Fiddler Classic to automatically enable and disable the proxy, use **Proxy Auto-configuration** with a URL pointing to %userprofile%\Documents\Fiddler2\Scripts\BrowserPAC.js. - -For example, in Firefox, click **Tools > Options > Advanced > Network > Settings**, and input the URL of the BrowserPAC.js. - -![Automatic proxy configuration URL][4] - -To find the correct auto-configuration URL from Fiddler: - -1. Click **Tools > Options > Connections**. -2. Clicking the **Copy Browser Proxy Configuration URL** link. - -![Copy Auto-Correct URL][5] - - -[1]: ../../images/ConfigureBrowsers/ExportRootCertificateToDesktop.png -[2]: ../../images/ConfigureBrowsers/ImportCertificate.png -[3]: ../../images/ConfigureBrowsers/TrustThisCAToIdentifyWebsites.png -[4]: ../../images/ConfigureBrowsers/BrowserPAC.png -[5]: ../../images/ConfigureBrowsers/CopyAutoCorrectURL.jpg -[6]: ./MonitorLocalTraffic -[7]: http://www.wikihow.com/Clear-Your-Browser's-Cache -[8]: ../../KnowledgeBase/FiddlerHook -[9]: ./FirefoxHTTPS -[10]: ../../images/ConfigureBrowsers/UseSystemProxySettings.png -[11]: ../../images/ConfigureBrowsers/FirefoxProxyError.png \ No newline at end of file diff --git a/configure-fiddler/tasks/configuredotnetapp.md b/configure-fiddler/tasks/configuredotnetapp.md deleted file mode 100644 index a31bcdb..0000000 --- a/configure-fiddler/tasks/configuredotnetapp.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Configure .NET applications -description: Configfure .NET Framework to automatically connect to Fiddler Classic -slug: DotNETConfig -publish: true -position: 6 ---- - -Configure .NET Applications -=========================== - -To allow the .NET Framework to automatically connect to Fiddler, start Fiddler Classic before starting the .NET application. - -To temporarily connect a .NET application to Fiddler Classic, use the **GlobalProxySelection** class to set a proxy: - ->System.Net.WebRequest.DefaultWebProxy = new System.Net.WebProxy("127.0.0.1", 8888); - -Or, specify a proxy inside the **yourappname.exe.config** file. - -+ If the .NET application is running in your current user account, add the following content inside the configuration section: - - - - - - - - - - -See [MSDN][1] for more on this topic. - -+ If the .NET application is running in a different user account (for example, a Windows service), edit the **machine.config** file: - - - - - - - -Or, manually specify the proxy on an individual WebRequest object: - - objRequest = (HttpWebRequest)WebRequest.Create(url); - objRequest.Proxy= new WebProxy("127.0.0.1", 8888); - -**Note:** Important: Regardless of other settings, .NET will always bypass the Fiddler Classic proxy for URLs containing localhost. So, rather than using localhost, change your code to refer to the machine name. For instance: - -+ This URL will not appear in Fiddler: ->http://localhost/X509SignCodeService/X509SigningService.asmx - -+ This URL will appear in Fiddler: ->http://mymachine/X509SignCodeService/X509SigningService.asmx - - - -Configure .NET Core Applications -=========================== - -Setup the proxy via netsh tool in commmand line the following way - -see [Netsh Docs][2] for more info on this topic - - netsh winhttp set proxy 127.0.0.1:8888 - -To remove the proxy use the following - - netsh winhttp reset proxy - - - -[1]: https://msdn.microsoft.com/en-us/magazine/cc300743.aspx -[2]: https://docs.microsoft.com/en-us/windows-server/networking/technologies/netsh/netsh-contexts - - - diff --git a/configure-fiddler/tasks/configurefiddler.md b/configure-fiddler/tasks/configurefiddler.md deleted file mode 100644 index 0deae24..0000000 --- a/configure-fiddler/tasks/configurefiddler.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Configure Fiddler -description: Learn how to configure Fiddler Classic. -slug: ConfigureFiddler -publish: true -position: 0 ---- - -# Getting Started with Fiddler Classic - - -1. Install Fiddler Classic. You can check more detailed information on how to install Fiddler Classic [here]({%slug UsingFiddler%}). - -2. Configure the Fiddler Classic Server. The **Fiddler Server** is the machine on which Fiddler Classic is installed. Some scenarios may require specific steps for Fiddler Classic to receive and send web traffic. This includes: - - - **Types of traffic**, like [decrypting HTTPS]({%slug DecryptHTTPS%}) and [authenticating with channel-binding tokens]({%slug AuthenticateWithCBT%}) - - **Operating systems**, like [Windows 8, Windows 10, Windows 11]({%slug Windows8Config%}) and [Mac OSX]({%slug ConfigureForMac%}) - - **Network configurations**, like [monitoring a remote machine]({%slug MonitorRemoteMachine%}), [chaining to an upstream proxy]({%slug ChainToUpstreamProxy%}), [using Fiddler Classic as a Reverse Proxy]({%slug UseFiddlerAsReverseProxy%}), [monitoring local traffic]({%slug MonitorLocalTraffic%}) or [monitoring dial-up and VPN connections]({%slug MonitorDialupAndVPN%}) - -3. Configure the Client. The **client** is the source of the web traffic that Fiddler Classic monitors. Some client applications, operating systems, and devices may require specific steps to send and receive traffic to and from Fiddler. This includes: - - - **Browsers**, like [Firefox, Opera, or IE (when sending traffic to localhost)]({%slug ConfigureBrowsers%}) - - **Applications**, like [.NET apps]({%slug DotNETConfig%}), [WinHTTP Apps]({%slug ConfigureWinHTTPApp%}), [Java Apps]({%slug ConfigureJavaApp%}), and [PHP/cURL apps]({%slug PHPcURL%}) - - **Devices**, like [Android]({%slug ConfigureForAndroid%}), [iOS]({%slug ConfigureForiOS%}), [Windows Phone 7]({%slug MonitorWindowsPhone7%}), and [PocketPC]({%slug MonitorPocketPC%}) devices. - - -## Additional Resources - -- [Capture traffic with Fiddler Classic]({%slug ViewWebTraffic%}) -- [Capture traffic on macOS, Linux and Windows with the new **Fiddler Everywhere**](https://docs.telerik.com/fiddler-everywhere) -* [Fiddler Homepage](https://www.telerik.com/fiddler) -* [Fiddler Everywhere Product Page](https://www.telerik.com/fiddler/fiddler-everywhere) diff --git a/configure-fiddler/tasks/configurejavaapp.md b/configure-fiddler/tasks/configurejavaapp.md deleted file mode 100644 index e2f34a6..0000000 --- a/configure-fiddler/tasks/configurejavaapp.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Configure a Java application -description: Configure a Java Application alongside Fiddler Classic proxy -slug: ConfigureJavaApp -publish: true -position: 8 ---- - -Configure a Java Application to Use Fiddler -=========================================== - -To configure a Java application to send web traffic to Fiddler, set the proxy using **jre**: - - jre -DproxySet=true -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888 - -Or: - - jre -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888 MyApp - -Or, change the Java Virtual Machine's proxy settings programmatically: - - System.setProperty("http.proxyHost", "127.0.0.1"); - System.setProperty("https.proxyHost", "127.0.0.1"); - System.setProperty("http.proxyPort", "8888"); - System.setProperty("https.proxyPort", "8888"); - -For the seamless experience in Windows you may consider adding - - System.setProperty("javax.net.ssl.trustStoreType","Windows-ROOT"); - -[Learn more about Java proxy settings.][1] - -[1]: http://java.sun.com/j2se/1.5.0/docs/guide/net/proxies.html diff --git a/configure-fiddler/tasks/respondwithclientcert.md b/configure-fiddler/tasks/respondwithclientcert.md deleted file mode 100644 index 2a2abc1..0000000 --- a/configure-fiddler/tasks/respondwithclientcert.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Respond to requests requiring client certificate -slug: RespondWithClientCert -publish: true -position: 5 ---- - -Respond to Requests Requiring a Client Certificate -================================================== - -To specify the .CER file for Fiddler Classic to return for a given session, add this FiddlerScript*: - - oSession["https-Client-Certificate"] = "C:\\test\\someCert.cer"; - -To specify a .CER file for Fiddler Classic to return otherwise, place that .CER file in: - - %USERPROFILE%\My Documents\Fiddler2\ClientCertificate.cer - -To generate a .CER file: - -1. [Install the certificate in the Current User's Personal Certificate Store][1]. - -2. Right-click the certificate in **Personal Certificates Store**. - -3. Click **All Tasks > Export...**. - - -[1]: https://msdn.microsoft.com/en-us/library/windows/hardware/ff546307(v=vs.85).aspx diff --git a/configure-fiddler/tasks/trustfiddlerrootcert.md b/configure-fiddler/tasks/trustfiddlerrootcert.md deleted file mode 100644 index f455bb9..0000000 --- a/configure-fiddler/tasks/trustfiddlerrootcert.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Trust FiddlerRoot Certificate -description: Configure Windows client to trust Fiddler Root certificate -slug: TrustFiddlerRootCert -publish: true -position: 4 ---- - -Configure Windows Client to trust Fiddler Root Certificate -========================================================== - -1. [Enable HTTPS traffic decryption][1]. - -2. Next to **Trust the Fiddler Root certificate?**, click **Yes**. - -![Trust the Fiddler Root certificate][2] - -3. After **Do you want to install this certificate?**, click **Yes**. - -![Install this certificate][3] - -[1]: ./DecryptHTTPS -[2]: ../../images/TrustFiddlerRootCert/TrustFiddlerRootCert.png -[3]: ../../images/TrustFiddlerRootCert/InstallThisCert.png diff --git a/configure-fiddler/troubleshooting/400errorfromiis.md b/configure-fiddler/troubleshooting/400errorfromiis.md index 6dc4e54..729c3dc 100644 --- a/configure-fiddler/troubleshooting/400errorfromiis.md +++ b/configure-fiddler/troubleshooting/400errorfromiis.md @@ -6,32 +6,29 @@ publish: true position: 4 --- -Problem: Unexpected 400 Bad Request Error from IIS Express ----------------------------------------------------------- +# Problem: Unexpected 400 Bad Request Error from IIS Express When requesting **http://ipv4.fiddler:2468** from an IIS Express instance, the server returns the following unexpected error message: - HTTP/1.1 400 Bad Request - Content-Type: text/html;charset=us-ascii - Server: Microsoft-HTTPAPI/2.0 - Date: Wed, 22 Aug 2012 19:59:52 GMT - Connection: close - Content-Length: 334 +```HTTP +HTTP/1.1 400 Bad Request +Content-Type: text/html;charset=us-ascii +Server: Microsoft-HTTPAPI/2.0 +Date: Wed, 22 Aug 2012 19:59:52 GMT +Connection: close +Content-Length: 334 - - Bad Request - -

Bad Request - Invalid Hostname

-

HTTP Error 400. The request hostname is invalid.

+ +Bad Request + +

Bad Request - Invalid Hostname

+

HTTP Error 400. The request hostname is invalid.

+``` -Solution: ---------- +## Solution: Replace **http://ipv.fiddler:2468** with **http://localhost.fiddler:2468**. -See also --------- +## See also -+ [Capture traffic from localhost][1] - -[1]: ../Tasks/MonitorLocalTraffic ++ [Capture traffic from localhost](slug://MonitorLocalTraffic) \ No newline at end of file diff --git a/configure-fiddler/troubleshooting/_meta.yml b/configure-fiddler/troubleshooting/_meta.yml new file mode 100644 index 0000000..a870a83 --- /dev/null +++ b/configure-fiddler/troubleshooting/_meta.yml @@ -0,0 +1,2 @@ +title: Troubleshooting +position: 300 \ No newline at end of file diff --git a/configure-fiddler/troubleshooting/cannotconfigureclienttouseproxy.md b/configure-fiddler/troubleshooting/cannotconfigureclienttouseproxy.md index 9c94369..d80b6a9 100644 --- a/configure-fiddler/troubleshooting/cannotconfigureclienttouseproxy.md +++ b/configure-fiddler/troubleshooting/cannotconfigureclienttouseproxy.md @@ -5,14 +5,10 @@ publish: true position: 2 --- -Problem: Cannot Configure Client to Use Proxy Server ----------------------------------------------------- +# Problem: Cannot Configure Client to Use Proxy Server The client device, application or platform has no option to use a proxy server like Fiddler. This is preventing capture of web traffic from the application. -Solution: ---------- +## Solution: -[Configure Fiddler Classic as a Reverse Proxy][1] - -[1]: ../Tasks/UseFiddlerAsReverseProxy +[Configure Fiddler Classic as a Reverse Proxy](slug://UseFiddlerAsReverseProxy) \ No newline at end of file diff --git a/configure-fiddler/troubleshooting/httpstimeout.md b/configure-fiddler/troubleshooting/httpstimeout.md index cc0ccd1..6fe9739 100644 --- a/configure-fiddler/troubleshooting/httpstimeout.md +++ b/configure-fiddler/troubleshooting/httpstimeout.md @@ -6,37 +6,33 @@ publish: true position: 8 --- -HTTPS Connections Timeout with Decryption Enabled -================================================= +# HTTPS Connections Timeout with Decryption Enabled -Problem: Client Application Cannot Reach HTTPS Site when Fiddler Classic is configured to decrypt HTTPS traffic. --------------------------------------------------------------------------------------------------------- +## Problem: Client Application Cannot Reach HTTPS Site when Fiddler Classic is configured to decrypt HTTPS traffic. This issue occurs on Windows Vista or later. -Solution 1: Customize Fiddler Classic Rules to force SSLv3 handshake ------------------------------------------------------------- +## Solution 1: Customize Fiddler Classic Rules to force SSLv3 handshake 1. Click **Rules > Customize Rules**. - 2. Add this code to the **OnBeforeRequest** method (where "HTTPSsite.com" is the hostname of the destination server): - if (oSession.HTTPMethodIs("CONNECT") && oSession.HostnameIs("HTTPSSite.com")) - { - oSession["x-OverrideSslProtocols"] = "ssl3"; - FiddlerApplication.Log.LogString("Legacy compat applied for inbound request to HTTPSSite.com"); - } +```c# +if (oSession.HTTPMethodIs("CONNECT") && oSession.HostnameIs("HTTPSSite.com")) +{ + oSession["x-OverrideSslProtocols"] = "ssl3"; + FiddlerApplication.Log.LogString("Legacy compat applied for inbound request to HTTPSSite.com"); +} +``` -Solution 2: Modify .NET application to force SSLv3 handshake ------------------------------------------------------------- +## Solution 2: Modify .NET application to force SSLv3 handshake Use this code in your .NET application: - ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; - -See Also --------- +```c# +ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; +``` -["How do you get a System.Web.HttpWebRequest object to use SSL 2.0?" at stackoverflow.com][1] +## See Also -[1]: https://stackoverflow.com/questions/169222/how-do-you-get-a-system-web-httpwebrequest-object-to-use-ssl-2-0/169396#169396 +["How do you get a System.Web.HttpWebRequest object to use SSL 2.0?" at stackoverflow.com](https://stackoverflow.com/questions/169222/) \ No newline at end of file diff --git a/images/MSFirewall/FirewallClient.png b/configure-fiddler/troubleshooting/images/FirewallClient.png similarity index 100% rename from images/MSFirewall/FirewallClient.png rename to configure-fiddler/troubleshooting/images/FirewallClient.png diff --git a/images/MSFirewall/FirewallIcon.png b/configure-fiddler/troubleshooting/images/FirewallIcon.png similarity index 100% rename from images/MSFirewall/FirewallIcon.png rename to configure-fiddler/troubleshooting/images/FirewallIcon.png diff --git a/configure-fiddler/troubleshooting/msfirewall.md b/configure-fiddler/troubleshooting/msfirewall.md index 5b5344f..30d3769 100644 --- a/configure-fiddler/troubleshooting/msfirewall.md +++ b/configure-fiddler/troubleshooting/msfirewall.md @@ -6,24 +6,19 @@ publish: true position: 9 --- -Problem: Fiddler Classic Detaches Randomly with MS Firewall for ISA 2004 ----------------------------------------------------------------- +# Problem: Fiddler Classic Detaches Randomly with MS Firewall for ISA 2004 Microsoft Firewall client for Microsoft ISA 2004 has an option to automatically reconfigure Internet Explorer settings. Unfortunately, this setting will cause Internet Explorer to detach from Fiddler Classic at random times. -Solution: Disable Web browser automatic configuration in the Microsoft Firewall client --------------------------------------------------------------------------------------- +## Solution: Disable Web browser automatic configuration in the Microsoft Firewall client -+ If there's a Firewall Client icon ![Firewall Client][1] in your system tray: +* If there's a Firewall Client icon ![Firewall Client](./images/FirewallIcon.png) in your system tray: 1. Right click the Firewall Client icon in the system tray. 2. Click **Configure...** from the context menu. -+ If there is no Firewall Client icon in your system tray: +* If there is no Firewall Client icon in your system tray: 1. Open the **Start Menu**. 2. Type 'firewall' in the Start Menu search box. - 3. Click the ![Firewall Client Management icon][2]. + 3. Click the ![Firewall Client Management icon](./images/FirewallClient.png). On the Web Browser tab, uncheck the **Enable Web browser automatic configuration** checkbox. - -[1]: ../../images/MSFirewall/FirewallIcon.png -[2]: ../../images/MSFirewall/FirewallClient.png diff --git a/configure-fiddler/troubleshooting/noauthtolocalmachine.md b/configure-fiddler/troubleshooting/noauthtolocalmachine.md index 0842104..89a9b7c 100644 --- a/configure-fiddler/troubleshooting/noauthtolocalmachine.md +++ b/configure-fiddler/troubleshooting/noauthtolocalmachine.md @@ -5,23 +5,18 @@ publish: true position: 7 --- -Problem: Website running on local machine with Fiddler Classic running rejects credentials +# Problem: Website running on local machine with Fiddler Classic running rejects credentials ---------------------------------------------------------------------------------- -Solution 1: ------------ +## Solution 1: -[Configure Fiddler Classic to Authenticate to Server][1] +[Configure Fiddler Classic to Authenticate to Server](slug://AuthenticateWithCBT) -Solution 2: ------------ +## Solution 2: -[Create the Local Security Authority host name that can be referenced in an NTLM authentication request][2] +[Create the Local Security Authority host name that can be referenced in an NTLM authentication request](https://learn.microsoft.com/bg-bg/troubleshoot/windows-server/networking/accessing-server-locally-with-fqdn-cname-alias-denied) -Solution 3: ------------ +## Solution 3: -[Disable the authentication loopback check][2] +[Disable the authentication loopback check](https://learn.microsoft.com/bg-bg/troubleshoot/windows-server/networking/accessing-server-locally-with-fqdn-cname-alias-denied) -[1]: ../Tasks/AuthenticateWithCBT -[2]: http://support.microsoft.com/kb/926642 diff --git a/configure-fiddler/troubleshooting/noofficewinhttpauth.md b/configure-fiddler/troubleshooting/noofficewinhttpauth.md index 722c708..5510911 100644 --- a/configure-fiddler/troubleshooting/noofficewinhttpauth.md +++ b/configure-fiddler/troubleshooting/noofficewinhttpauth.md @@ -5,18 +5,12 @@ publish: true position: 6 --- -Problem: Office clients using WinHTTP do not properly authenticate while running Fiddler Classic ----------------------------------------------------------------------------------------- +# Problem: Office clients using WinHTTP do not properly authenticate while running Fiddler Classic -Solution 1: ------------ +## Solution 1: -[Configure Fiddler Classic to Authenticate to the Server][1] +[Configure Fiddler Classic to Authenticate to the Server](slug://AuthenticateWithCBT) -Solution 2: ------------ +## Solution 2: -[Change **AuthFowardServerList** with REGEDIT][2] - -[1]: ../Tasks/AuthenticateWithCBT -[2]: http://support.microsoft.com/kb/956943 +[Change **AuthFowardServerList** with REGEDIT](http://support.microsoft.com/kb/956943) diff --git a/configure-fiddler/troubleshooting/nowindowsphone7traffic.md b/configure-fiddler/troubleshooting/nowindowsphone7traffic.md index 936e3e1..27144b9 100644 --- a/configure-fiddler/troubleshooting/nowindowsphone7traffic.md +++ b/configure-fiddler/troubleshooting/nowindowsphone7traffic.md @@ -6,12 +6,10 @@ publish: true position: 5 --- -Problem: Windows Phone does not exchange web traffic with Fiddler -------------------------------------------------------------------- +# Problem: Windows Phone does not exchange web traffic with Fiddler After configuring a Windows Phone to use Fiddler Classic as a proxy, requests from the Windows Phone device do not return resources or appear in the Fiddler Classic session list. -Solution: Create an IPSEC Boundary Computer Exception ------------------------------------------------------ +## Solution: Create an IPSEC Boundary Computer Exception If the Fiddler server (the machine running Fiddler) is on a network with IPSEC enabled, create an IPSEC Boundary Computer exception. Contact a network administrator to create this exception. diff --git a/configure-fiddler/troubleshooting/proxysettingsperuser.md b/configure-fiddler/troubleshooting/proxysettingsperuser.md index d8cbf03..04c1e71 100644 --- a/configure-fiddler/troubleshooting/proxysettingsperuser.md +++ b/configure-fiddler/troubleshooting/proxysettingsperuser.md @@ -5,17 +5,15 @@ publish: true position: 10 --- - - -Problem: No Traffic is captured with ProxySettingsPerUser=0 Group Policy Setting --------------------------------------------------------------------------------- +# Problem: No Traffic is captured with ProxySettingsPerUser=0 Group Policy Setting Your system or domain Administrator has set the Group Policy setting **ProxySettingsPerUser** to **0**. This means that instead of the default Windows behavior (each user has their own proxy settings), instead all user accounts share one set of proxy settings. In this case, a value named ProxySettingsPerUser exists inside: - HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\ +```txt +HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\ +``` -Solution: Run Fiddler Classic as Administrator --------------------------------------- +## Solution: Run Fiddler Classic as Administrator This machine-wide proxy setting can only be changed by code running as an Adminstrator, so Fiddler Classic must be started **Elevated**: @@ -26,6 +24,8 @@ This will adjust the proxy setting. If you cannot run Fiddler Classic as Admin (because, for example, you're not an Administrator) you will need to request that your system or domain administrator disable this policy: - HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\ProxySettingsPerUser is 0. +```txt +HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\ProxySettingsPerUser is 0. +``` This policy setting does not impact clients that are not configured to use the system proxy settings (For example, Firefox with a manual proxy configuration). diff --git a/configure-fiddler/troubleshooting/repeat401errors.md b/configure-fiddler/troubleshooting/repeat401errors.md index c37541a..822e17a 100644 --- a/configure-fiddler/troubleshooting/repeat401errors.md +++ b/configure-fiddler/troubleshooting/repeat401errors.md @@ -5,14 +5,10 @@ publish: true position: 3 --- -Problem: Repeat 401 Errors and Windows Security Prompts -------------------------------------------------------- +# Problem: Repeat 401 Errors and Windows Security Prompts When connecting to a server protected with channel-binding tokens (CBT), the server returns a series of 401 errors, and the browser continuously prompts for credentials. -Solution: ---------- +## Solution: -[Configure Fiddler Classic to authenticate to a CBT-protected server][1] - -[1]: ../Tasks/AuthenticateWithCBT +[Configure Fiddler Classic to authenticate to a CBT-protected server](slug://AuthenticateWithCBT) \ No newline at end of file diff --git a/configure-fiddler/troubleshooting/untrustedcertwarnings.md b/configure-fiddler/troubleshooting/untrustedcertwarnings.md index 39d47ce..c1bfa11 100644 --- a/configure-fiddler/troubleshooting/untrustedcertwarnings.md +++ b/configure-fiddler/troubleshooting/untrustedcertwarnings.md @@ -5,12 +5,10 @@ publish: true position: 1 --- -Problem: Untrusted Certificate Warnings ---------------------------------------- +# Problem: Untrusted Certificate Warnings When using Fiddler, browsers may display untrusted certificate warnings, such as Internet Explorer's **There is a problem with this website's security certificate.** or Chrome's **The site's security certificate is not trusted!**. -Solution: ---------- +## Solution: -[Configure Windows client to trust the Fiddler Root Certificate]({%slug TrustFiddlerRootCert%}) +[Configure Windows client to trust the Fiddler Root Certificate](slug://TrustFiddlerRootCert) \ No newline at end of file diff --git a/configure-fiddler/trustfiddlerrootcert.md b/configure-fiddler/trustfiddlerrootcert.md new file mode 100644 index 0000000..c97c35d --- /dev/null +++ b/configure-fiddler/trustfiddlerrootcert.md @@ -0,0 +1,15 @@ +--- +title: Using the Fiddler Root CA Certificate +description: Install and trust Fiddler Root CA certificate on Windows +slug: TrustFiddlerRootCert +publish: true +position: 30 +--- + +# Configure Windows Client App to trust Fiddler Root Certificate + +1. [Enable HTTPS traffic decryption](slug://DecryptHTTPS). +1. Next to **Trust the Fiddler Root certificate?**, click **Yes**. + ![Trust the Fiddler Root certificate](./images/TrustFiddlerRootCert.png) +1. After **Do you want to install this certificate?**, click **Yes**. + ![Install this certificate](./images/InstallThisCert.png) diff --git a/docs-builder.yml b/docs-builder.yml new file mode 100644 index 0000000..0908f69 --- /dev/null +++ b/docs-builder.yml @@ -0,0 +1,61 @@ +top-navigation-product: fiddler-classic +path-prefix: /fiddler/fiddler-classic/documentation +default-title-prefix: Fiddler Classic + +primary-color: "#27c106" # Fiddler Classic green + +product-id: 1392 +product-code: FIDDLER +product-name: Progress Telerik Fiddler Classic +product-url: https://www.telerik.com/fiddler/fiddler-classic +product-trial-url: https://www.telerik.com/download/fiddler + +contribute-url: https://github.com/telerik/fiddler-docs/edit/master +search-engine-id: 001595215763381649090:dyayucp6jmq # TODO get a new one for Fiddler Classic +# where should we add the google analytics and tag manager codes (refer to _config.yml)? +avatar-path: ./images/common/avatar-ninja.svg # TODO get a Fiddler Classic NINJA +no-results-image-path: ./images/common/no-results.svg # TODO get a Fiddler Classic no-results.png +table-layout: fixed +enable-tabbed-code-blocks: true +gitLastCommitDateEnabled: true + +cta-overview: '@ProductLink is a powerful web debugging tool that helps developers inspect, modify, and analyze HTTP and HTTPS traffic.' +cta-intro: '@ProductLink is a web debugging proxy for Windows. It allows you to inspect and modify HTTP and HTTPS traffic from any application that supports a proxy.' + +img-max-width: 100% +center-images: false + +meta: + '*': + hideCta: true #consult if we want to hide the CTA on all pages + configure-fiddler: + title: Configure Fiddler Classic + position: 10 + observe-traffic: + title: Observe Traffic + position: 20 + modify-traffic: + title: Modify Traffic + position: 30 + generate-traffic: + title: Generate Traffic + position: 40 + save-and-load-traffic: + title: Save & Load Traffic + position: 50 + extend-fiddler: + title: Extend Fiddler Classic + position: 60 + troubleshooting-fiddler: + title: Troubleshooting + position: 70 + knowledge-base: + title: Knowledge Base + position: 1000 + relativeUrl: /knowledge-base + hideChildren: true + res_type: kb + +redirects: +- from: ^/$ + to: /introduction \ No newline at end of file diff --git a/extend-fiddler/addicon.md b/extend-fiddler/addicon.md index c13ffb5..9a2ef50 100644 --- a/extend-fiddler/addicon.md +++ b/extend-fiddler/addicon.md @@ -5,37 +5,39 @@ publish: true position: 4 --- -Add an Icon to Your Extension's Tab -=================================== +# Add an Icon to Your Extension's Tab -Use an Existing Icon --------------------- +## Use an Existing Icon Set the **.ImageIndex** property as follows: - public void OnLoad() - { - oPage = new TabPage("Timeline"); - oPage.ImageIndex = (int)Fiddler.SessionIcons.Timeline; - oView = new TimelineView(); - oPage.Controls.Add(oView); - oView.Dock = DockStyle.Fill; - FiddlerApplication.UI.tabsViews.TabPages.Add(oPage); - } +```c# +public void OnLoad() +{ + oPage = new TabPage("Timeline"); + oPage.ImageIndex = (int)Fiddler.SessionIcons.Timeline; + oView = new TimelineView(); + oPage.Controls.Add(oView); + oView.Dock = DockStyle.Fill; + FiddlerApplication.UI.tabsViews.TabPages.Add(oPage); +} +``` -Add a Custom Image ------------------- +## Add a Custom Image 1. Add the image to **imglSessionIcons**. 2. Set the **.ImageIndex** property as follows: - public void OnLoad() - { - oPage = new TabPage("Timeline"); - oPage.ImageIndex = (int)Fiddler.SessionIcons.Timeline; - oView = new TimelineView(); - oPage.Controls.Add(oView); - oView.Dock = DockStyle.Fill; - FiddlerApplication.UI.tabsViews.TabPages.Add(oPage); - } +```c# +public void OnLoad() +{ + oPage = new TabPage("Timeline"); + oPage.ImageIndex = (int)Fiddler.SessionIcons.Timeline; + oView = new TimelineView(); + oPage.Controls.Add(oView); + oView.Dock = DockStyle.Fill; + FiddlerApplication.UI.tabsViews.TabPages.Add(oPage); +} + +``` \ No newline at end of file diff --git a/extend-fiddler/addmenuitems.md b/extend-fiddler/addmenuitems.md index eae6009..47ae867 100644 --- a/extend-fiddler/addmenuitems.md +++ b/extend-fiddler/addmenuitems.md @@ -6,16 +6,17 @@ publish: true position: 14 --- -Add Menu Items -============== +# Add Menu Items To add menu actions to the **Tools** menu or context menus or add options to the **Rules** menu: 1. Create and execute a .REG file as follows: - [HKEY_CURRENT_USER\Software\Microsoft\Fiddler2\MenuExt\&YourMenuItemName] - "Command"="YourExeName.exe" - "Parameters"="Your Parameters To Pass To The EXE" + ```txt + [HKEY_CURRENT_USER\Software\Microsoft\Fiddler2\MenuExt\&YourMenuItemName] + "Command"="YourExeName.exe" + "Parameters"="Your Parameters To Pass To The EXE" + ``` 2. Restart Fiddler. diff --git a/extend-fiddler/addrules.md b/extend-fiddler/addrules.md index 622670f..1e00930 100644 --- a/extend-fiddler/addrules.md +++ b/extend-fiddler/addrules.md @@ -5,11 +5,9 @@ publish: true position: 13 --- -Add Rules to Fiddler -==================== +# Add Rules to Fiddler -Customize Rules ---------------- +## Customize Rules To add custom columns to the Fiddler Classic UI, modify requests or responses, test application performance, and a variety of other custom tasks, add rules to Fiddler's JScript.NET CustomRules.js file in **FiddlerScript**. @@ -21,8 +19,7 @@ To add custom columns to the Fiddler Classic UI, modify requests or responses, t Fiddler Classic will automatically reload the rules. -Use Additional .NET Assemblies ------------------------------- +## Use Additional .NET Assemblies To use additional .NET assemblies in your script: @@ -40,29 +37,16 @@ To use additional .NET assemblies in your script: To use the new assembly's functions without fully-qualifying them, update the **#import** clause at the top of the script. -Change the JScript Editor Launched from the **Rules** Menu ----------------------------------------------------------- +## Change the JScript Editor Launched from the **Rules** Menu 1. Click **Tools > Options**. 2. Edit the **Editor** string. -Restore Default Rules ---------------------- +## Restore Default Rules 1. Delete the **CustomRules.js** file in **%userprofile%\Documents\Fiddler2\Scripts**. 2. Restart Fiddler. Note: Fiddler's default rules are stored in **%localappdata%\Programs\Fiddler\Scripts\SampleRules.js**. - -See Also --------- - -+ [FiddlerScript Reference][1] -+ [FiddlerScript Editor][2] -+ [Fiddler Classic SessionFlags][3] - -[1]: ../KnowledgeBase/FiddlerScript/ -[2]: http://fiddler2.com/add-ons -[3]: ../KnowledgeBase/SessionFlags diff --git a/extend-fiddler/buildimporterexporter.md b/extend-fiddler/buildimporterexporter.md index 11e1e61..a987910 100644 --- a/extend-fiddler/buildimporterexporter.md +++ b/extend-fiddler/buildimporterexporter.md @@ -6,142 +6,133 @@ publish: true position: 8 --- -Build a Custom Importer or Exporter -=================================== +# Build a Custom Importer or Exporter -Sample Extension ----------------- +## Sample Extension -1. Create a [Fiddler Classic extension project][1]. +1. Create a [Fiddler Classic extension project](slug://CreateExtension). 2. Modify the default class1.cs (or create a new class) in your project as follows: - using System; - using System.IO; - using System.Text; - using System.Windows.Forms; - using Fiddler; - using System.Diagnostics; - using System.Reflection; - [assembly: AssemblyVersion("1.0.0.0")] - [assembly: Fiddler.RequiredVersion("2.4.0.0")] - - - [ProfferFormat("TAB-Separated Values", "Session List in Tab-Delimited Format")] - [ProfferFormat("Comma-Separated Values", - "Session List in Comma-Delimited Format; import into Excel or other tools")] +```c# +using System; +using System.IO; +using System.Text; +using System.Windows.Forms; +using Fiddler; +using System.Diagnostics; +using System.Reflection; +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: Fiddler.RequiredVersion("2.4.0.0")] + + +[ProfferFormat("TAB-Separated Values", "Session List in Tab-Delimited Format")] +[ProfferFormat("Comma-Separated Values", + "Session List in Comma-Delimited Format; import into Excel or other tools")] + +public class CSVTranscoder: ISessionExporter // Ensure class is public, or Fiddler Classic won't see it! +{ + public bool ExportSessions(string sFormat, Session[] oSessions, Dictionary dictOptions, + EventHandler evtProgressNotifications) + { + bool bResult = false; + string chSplit; + + // Determine if we already have a filename from the dictOptions collection + string sFilename = null; + if (null != dictOptions && dictOptions.ContainsKey("Filename")) + { + sFilename = dictOptions["Filename"] as string; + } + + if (sFormat == "Comma-Separated Values") + { + chSplit = ","; + if (string.IsNullOrEmpty(sFilename)) sFilename = Fiddler.Utilities.ObtainSaveFilename("Export As " + sFormat, "CSV Files (*.csv)|*.csv"); + } + else + { + chSplit = "\t"; + if (string.IsNullOrEmpty(sFilename)) sFilename = Fiddler.Utilities.ObtainSaveFilename("Export As " + sFormat, "TSV Files (*.tsv)|*.tsv"); + } + + if (String.IsNullOrEmpty(sFilename)) return false; + + try + { + StreamWriter swOutput = new StreamWriter(sFilename, false, Encoding.UTF8); + int iCount = 0; + int iMax = oSessions.Length; + + #region WriteColHeaders + bool bFirstCol = true; + foreach (ColumnHeader oLVCol in FiddlerApplication.UI.lvSessions.Columns) + { + if (!bFirstCol) + { + swOutput.Write(chSplit); + } + else + { + bFirstCol = false; + } + swOutput.Write(oLVCol.Text.Replace(chSplit, "")); + } + swOutput.WriteLine(); + #endregion WriteColHeaders - public class CSVTranscoder: ISessionExporter // Ensure class is public, or Fiddler Classic won't see it! + #region WriteEachSession + foreach (Session oS in oSessions) + { + iCount++; + if (null != oS.ViewItem) { - public bool ExportSessions(string sFormat, Session[] oSessions, Dictionary dictOptions, - EventHandler evtProgressNotifications) - { - bool bResult = false; - string chSplit; - - // Determine if we already have a filename from the dictOptions collection - string sFilename = null; - if (null != dictOptions && dictOptions.ContainsKey("Filename")) - { - sFilename = dictOptions["Filename"] as string; - } - - if (sFormat == "Comma-Separated Values") - { - chSplit = ","; - if (string.IsNullOrEmpty(sFilename)) sFilename = Fiddler.Utilities.ObtainSaveFilename("Export As " + sFormat, "CSV Files (*.csv)|*.csv"); - } - else - { - chSplit = "\t"; - if (string.IsNullOrEmpty(sFilename)) sFilename = Fiddler.Utilities.ObtainSaveFilename("Export As " + sFormat, "TSV Files (*.tsv)|*.tsv"); - } - - if (String.IsNullOrEmpty(sFilename)) return false; - - try - { - StreamWriter swOutput = new StreamWriter(sFilename, false, Encoding.UTF8); - int iCount = 0; - int iMax = oSessions.Length; - - #region WriteColHeaders - bool bFirstCol = true; - foreach (ColumnHeader oLVCol in FiddlerApplication.UI.lvSessions.Columns) - { - if (!bFirstCol) - { - swOutput.Write(chSplit); - } - else - { - bFirstCol = false; - } - swOutput.Write(oLVCol.Text.Replace(chSplit, "")); - } - swOutput.WriteLine(); - #endregion WriteColHeaders - - #region WriteEachSession - foreach (Session oS in oSessions) - { - iCount++; - if (null != oS.ViewItem) - { - bFirstCol = true; - ListViewItem oLVI = (oS.ViewItem as ListViewItem); - if (null == oLVI) continue; - foreach (ListViewItem.ListViewSubItem oLVC in oLVI.SubItems) - { - if (!bFirstCol) - { - swOutput.Write(chSplit); - } - else - { - bFirstCol = false; - } - - swOutput.Write(oLVC.Text.Replace(chSplit, "")); - } - - swOutput.WriteLine(); - } - - if (null != evtProgressNotifications) - { - evtProgressNotifications(null, new ProgressCallbackEventArgs(, )); - ProgressCallbackEventArgs PCEA = new ProgressCallbackEventArgs((iCount/(float)iMax), "wrote " + iCount.ToString() + " records."); - evtProgressNotifications(null, PCEA); - if (PCEA.Cancel) { swOutput.Close(); return false; } - } - } - #endregion WriteEachSession - - swOutput.Close(); - bResult = true; - } - catch (Exception eX) - { - MessageBox.Show(eX.Message, "Failed to export"); - bResult = false; - } - } - return bResult; - } - - public void Dispose() - { - } + bFirstCol = true; + ListViewItem oLVI = (oS.ViewItem as ListViewItem); + if (null == oLVI) continue; + foreach (ListViewItem.ListViewSubItem oLVC in oLVI.SubItems) + { + if (!bFirstCol) + { + swOutput.Write(chSplit); } + else + { + bFirstCol = false; + } + swOutput.Write(oLVC.Text.Replace(chSplit, "")); + } -3. [Compile and load your extension in Fiddler][2]. + swOutput.WriteLine(); + } + + if (null != evtProgressNotifications) + { + evtProgressNotifications(null, new ProgressCallbackEventArgs(, )); + ProgressCallbackEventArgs PCEA = new ProgressCallbackEventArgs((iCount/(float)iMax), "wrote " + iCount.ToString() + " records."); + evtProgressNotifications(null, PCEA); + if (PCEA.Cancel) { swOutput.Close(); return false; } + } + } + #endregion WriteEachSession + + swOutput.Close(); + bResult = true; + } + catch (Exception eX) + { + MessageBox.Show(eX.Message, "Failed to export"); + bResult = false; + } + } + return bResult; + } -See Also --------- + public void Dispose() + { + } +} +``` -[Build extension assemblies to run in both Fiddler Classic versions 2 and 4][3] -[1]: ./CreateExtension -[2]: ./LoadExtension -[3]: ./ExtensionsForv2Andv4 +3. [Compile and load your extension in Fiddler](slug://LoadExtension). \ No newline at end of file diff --git a/extend-fiddler/cookieextension.md b/extend-fiddler/cookieextension.md index 25e4b2a..bfadf66 100644 --- a/extend-fiddler/cookieextension.md +++ b/extend-fiddler/cookieextension.md @@ -5,234 +5,235 @@ publish: true position: 16 --- -Build Cookie Scanning Extension -=============================== +# Build Cookie Scanning Extension Below is the code for the Fiddler Classic [Privacy Scanner add-on](https://www.telerik.com/fiddler/add-ons). - using System; - using System.Collections; - using System.Globalization; - using System.Collections.Generic; - using System.Windows.Forms; - using System.Text; - using Fiddler; - using System.IO; - using System.Diagnostics; - using Microsoft.Win32; - using System.Reflection; - using System.Text.RegularExpressions; - - [assembly: Fiddler.RequiredVersion("2.3.9.0")] - [assembly: AssemblyVersion("1.0.1.0")] - [assembly: AssemblyTitle("PrivacyScanner")] - [assembly: AssemblyDescription("Scans for Cookies and P3P")] - [assembly: AssemblyCompany("Eric Lawrence")] - [assembly: AssemblyProduct("PrivacyScanner")] - - public class TagCookies : IAutoTamper2 +```c# +using System; +using System.Collections; +using System.Globalization; +using System.Collections.Generic; +using System.Windows.Forms; +using System.Text; +using Fiddler; +using System.IO; +using System.Diagnostics; +using Microsoft.Win32; +using System.Reflection; +using System.Text.RegularExpressions; + +[assembly: Fiddler.RequiredVersion("2.3.9.0")] +[assembly: AssemblyVersion("1.0.1.0")] +[assembly: AssemblyTitle("PrivacyScanner")] +[assembly: AssemblyDescription("Scans for Cookies and P3P")] +[assembly: AssemblyCompany("Eric Lawrence")] +[assembly: AssemblyProduct("PrivacyScanner")] + +public class TagCookies : IAutoTamper2 +{ + private bool bEnabled = false; + private bool bEnforceP3PValidity = false; + private bool bCreatedColumn = false; + private System.Windows.Forms.MenuItem miEnabled; + private System.Windows.Forms.MenuItem miEnforceP3PValidity; + private System.Windows.Forms.MenuItem mnuCookieTag; + + public void OnLoad() + { + /* + * NB: You might not get called here until ~after~ one of the AutoTamper methods was called. + * This is okay for us, because we created our mnuContentBlock in the constructor and its simply not + * visible anywhere until this method is called and we merge it onto the Fiddler Classic Main menu. + */ + FiddlerApplication.UI.mnuMain.MenuItems.Add(mnuCookieTag); + } + + public void OnBeforeUnload() { /*noop*/ } + + private void InitializeMenu() + { + this.miEnabled = new System.Windows.Forms.MenuItem("&Enabled"); + this.miEnforceP3PValidity = new System.Windows.Forms.MenuItem("&Rename P3P header if invalid"); + + this.miEnabled.Index = 0; + this.miEnforceP3PValidity.Index = 1; + + this.mnuCookieTag = new System.Windows.Forms.MenuItem(); + this.mnuCookieTag.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.miEnabled, this.miEnforceP3PValidity }); + this.mnuCookieTag.Text = "Privacy"; + + this.miEnabled.Click += new System.EventHandler(this.miEnabled_Click); + this.miEnabled.Checked = bEnabled; + + this.miEnforceP3PValidity.Click += new System.EventHandler(this.miEnforceP3PValidity_Click); + this.miEnforceP3PValidity.Checked = bEnforceP3PValidity; + } + + public void miEnabled_Click(object sender, EventArgs e) + { + miEnabled.Checked = !miEnabled.Checked; + bEnabled = miEnabled.Checked; + this.miEnforceP3PValidity.Enabled = bEnabled; + if (bEnabled) { EnsureColumn(); } + FiddlerApplication.Prefs.SetBoolPref("extensions.tagcookies.enabled", bEnabled); + } + + public void miEnforceP3PValidity_Click(object sender, EventArgs e) + { + miEnforceP3PValidity.Checked = !miEnforceP3PValidity.Checked; + bEnforceP3PValidity = miEnforceP3PValidity.Checked; + FiddlerApplication.Prefs.SetBoolPref("extensions.tagcookies.EnforceP3PValidity", bEnforceP3PValidity); + } + + private void EnsureColumn() + { + if (bCreatedColumn) return; + + FiddlerApplication.UI.lvSessions.AddBoundColumn("Privacy Info", 1, 120, "X-Privacy"); + + bCreatedColumn = true; + } + + public TagCookies() + { + this.bEnabled = FiddlerApplication.Prefs.GetBoolPref("extensions.tagcookies.enabled", false); + this.bEnforceP3PValidity = FiddlerApplication.Prefs.GetBoolPref("extensions.tagcookies.EnforceP3PValidity", true); + InitializeMenu(); + + if (bEnabled) { EnsureColumn(); } else { this.miEnforceP3PValidity.Enabled = false; } + } + + private void SetP3PStateFromHeader(string sValue, ref P3PState oP3PState) + { + if (string.IsNullOrEmpty(sValue)) { - private bool bEnabled = false; - private bool bEnforceP3PValidity = false; - private bool bCreatedColumn = false; - private System.Windows.Forms.MenuItem miEnabled; - private System.Windows.Forms.MenuItem miEnforceP3PValidity; - private System.Windows.Forms.MenuItem mnuCookieTag; - - public void OnLoad() - { - /* - * NB: You might not get called here until ~after~ one of the AutoTamper methods was called. - * This is okay for us, because we created our mnuContentBlock in the constructor and its simply not - * visible anywhere until this method is called and we merge it onto the Fiddler Classic Main menu. - */ - FiddlerApplication.UI.mnuMain.MenuItems.Add(mnuCookieTag); - } - - public void OnBeforeUnload() { /*noop*/ } - - private void InitializeMenu() - { - this.miEnabled = new System.Windows.Forms.MenuItem("&Enabled"); - this.miEnforceP3PValidity = new System.Windows.Forms.MenuItem("&Rename P3P header if invalid"); - - this.miEnabled.Index = 0; - this.miEnforceP3PValidity.Index = 1; - - this.mnuCookieTag = new System.Windows.Forms.MenuItem(); - this.mnuCookieTag.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.miEnabled, this.miEnforceP3PValidity }); - this.mnuCookieTag.Text = "Privacy"; - - this.miEnabled.Click += new System.EventHandler(this.miEnabled_Click); - this.miEnabled.Checked = bEnabled; - - this.miEnforceP3PValidity.Click += new System.EventHandler(this.miEnforceP3PValidity_Click); - this.miEnforceP3PValidity.Checked = bEnforceP3PValidity; - } - - public void miEnabled_Click(object sender, EventArgs e) - { - miEnabled.Checked = !miEnabled.Checked; - bEnabled = miEnabled.Checked; - this.miEnforceP3PValidity.Enabled = bEnabled; - if (bEnabled) { EnsureColumn(); } - FiddlerApplication.Prefs.SetBoolPref("extensions.tagcookies.enabled", bEnabled); - } - - public void miEnforceP3PValidity_Click(object sender, EventArgs e) - { - miEnforceP3PValidity.Checked = !miEnforceP3PValidity.Checked; - bEnforceP3PValidity = miEnforceP3PValidity.Checked; - FiddlerApplication.Prefs.SetBoolPref("extensions.tagcookies.EnforceP3PValidity", bEnforceP3PValidity); - } - - private void EnsureColumn() + return; + } + + string sUnsatCat = String.Empty; + string sUnsatPurpose = String.Empty; + sValue = sValue.Replace('\'', '"'); + + string sCP = null; + + Regex r = new Regex("CP\\s?=\\s?[\"]?(?[^\";]*)"); + Match m = r.Match(sValue); + if (m.Success && (null != m.Groups["TokenValue"])) + { + sCP = m.Groups["TokenValue"].Value; + } + + if (String.IsNullOrEmpty(sCP)) + { + return; + } + + // Okay, we've got a compact policy token. + + oP3PState = P3PState.P3POk; + string[] sTokens = sCP.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + foreach (string sToken in sTokens) + { + // Reject clearly invalid tokens... + if ((sToken.Length < 3) || (sToken.Length > 4)) { - if (bCreatedColumn) return; - - FiddlerApplication.UI.lvSessions.AddBoundColumn("Privacy Info", 1, 120, "X-Privacy"); - - bCreatedColumn = true; + oP3PState = P3PState.P3PMalformed; + return; } - - public TagCookies() + + if (",PHY,ONL,GOV,FIN,".IndexOf("," + sToken + ",", StringComparison.OrdinalIgnoreCase) > -1) { - this.bEnabled = FiddlerApplication.Prefs.GetBoolPref("extensions.tagcookies.enabled", false); - this.bEnforceP3PValidity = FiddlerApplication.Prefs.GetBoolPref("extensions.tagcookies.EnforceP3PValidity", true); - InitializeMenu(); - - if (bEnabled) { EnsureColumn(); } else { this.miEnforceP3PValidity.Enabled = false; } + sUnsatCat += (sToken + " "); + continue; } - - private void SetP3PStateFromHeader(string sValue, ref P3PState oP3PState) + + if (",SAM,OTR,UNR,PUB,IVA,IVD,CON,TEL,OTP,".IndexOf("," + sToken + ",", StringComparison.OrdinalIgnoreCase) > -1) { - if (string.IsNullOrEmpty(sValue)) - { - return; - } - - string sUnsatCat = String.Empty; - string sUnsatPurpose = String.Empty; - sValue = sValue.Replace('\'', '"'); - - string sCP = null; - - Regex r = new Regex("CP\\s?=\\s?[\"]?(?[^\";]*)"); - Match m = r.Match(sValue); - if (m.Success && (null != m.Groups["TokenValue"])) - { - sCP = m.Groups["TokenValue"].Value; - } - - if (String.IsNullOrEmpty(sCP)) - { - return; - } - - // Okay, we've got a compact policy token. - - oP3PState = P3PState.P3POk; - string[] sTokens = sCP.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - - foreach (string sToken in sTokens) - { - // Reject clearly invalid tokens... - if ((sToken.Length < 3) || (sToken.Length > 4)) - { - oP3PState = P3PState.P3PMalformed; - return; - } - - if (",PHY,ONL,GOV,FIN,".IndexOf("," + sToken + ",", StringComparison.OrdinalIgnoreCase) > -1) - { - sUnsatCat += (sToken + " "); - continue; - } - - if (",SAM,OTR,UNR,PUB,IVA,IVD,CON,TEL,OTP,".IndexOf("," + sToken + ",", StringComparison.OrdinalIgnoreCase) > -1) - { - sUnsatPurpose += (sToken + " "); - continue; - } - - // TODO: Look up the token in the complete collection and check validity - } - - // If a cookie contains an unsatisfactory purpose and an unsatisfactory category, mark it - // https://msdn.microsoft.com/en-us/library/ie/ms537343(v=vs.85).aspx#unsatisfactory_cookies - if ((sUnsatCat.Length > 0) && (sUnsatPurpose.Length > 0)) - { - if (oP3PState == P3PState.P3POk) - { - oP3PState = P3PState.P3PUnsatisfactory; - } - } + sUnsatPurpose += (sToken + " "); + continue; } - - private enum P3PState + + // TODO: Look up the token in the complete collection and check validity + } + + // If a cookie contains an unsatisfactory purpose and an unsatisfactory category, mark it + // https://msdn.microsoft.com/en-us/library/ie/ms537343(v=vs.85).aspx#unsatisfactory_cookies + if ((sUnsatCat.Length > 0) && (sUnsatPurpose.Length > 0)) + { + if (oP3PState == P3PState.P3POk) { - NoCookies, - NoP3PAndSetsCookies, - P3POk, - P3PUnsatisfactory, - P3PMalformed + oP3PState = P3PState.P3PUnsatisfactory; } - - public void OnPeekAtResponseHeaders(Session oSession) - { - if (!bEnabled) return; - - P3PState oP3PState = P3PState.NoCookies; - - if (!oSession.oResponse.headers.Exists("Set-Cookie")) - { - return; - } - - oP3PState = P3PState.NoP3PAndSetsCookies; - - if (oSession.oResponse.headers.Exists("P3P")) - { - SetP3PStateFromHeader(oSession.oResponse.headers["P3P"], ref oP3PState); - } - - switch (oP3PState) + } + } + + private enum P3PState + { + NoCookies, + NoP3PAndSetsCookies, + P3POk, + P3PUnsatisfactory, + P3PMalformed + } + + public void OnPeekAtResponseHeaders(Session oSession) + { + if (!bEnabled) return; + + P3PState oP3PState = P3PState.NoCookies; + + if (!oSession.oResponse.headers.Exists("Set-Cookie")) + { + return; + } + + oP3PState = P3PState.NoP3PAndSetsCookies; + + if (oSession.oResponse.headers.Exists("P3P")) + { + SetP3PStateFromHeader(oSession.oResponse.headers["P3P"], ref oP3PState); + } + + switch (oP3PState) + { + case P3PState.P3POk: + oSession["ui-backcolor"] = "#ACDC85"; + oSession["X-Privacy"] = "Sets cookies & P3P"; + break; + + case P3PState.NoP3PAndSetsCookies: + oSession["ui-backcolor"] = "#FAFDA4"; + oSession["X-Privacy"] = "Sets cookies without P3P"; + break; + + case P3PState.P3PUnsatisfactory: + oSession["ui-backcolor"] = "#EC921A"; + oSession["X-Privacy"] = "Sets cookies; P3P unsatisfactory for 3rd-party use"; + break; + + case P3PState.P3PMalformed: + oSession["ui-backcolor"] = "#E90A05"; + if (bEnforceP3PValidity) { - case P3PState.P3POk: - oSession["ui-backcolor"] = "#ACDC85"; - oSession["X-Privacy"] = "Sets cookies & P3P"; - break; - - case P3PState.NoP3PAndSetsCookies: - oSession["ui-backcolor"] = "#FAFDA4"; - oSession["X-Privacy"] = "Sets cookies without P3P"; - break; - - case P3PState.P3PUnsatisfactory: - oSession["ui-backcolor"] = "#EC921A"; - oSession["X-Privacy"] = "Sets cookies; P3P unsatisfactory for 3rd-party use"; - break; - - case P3PState.P3PMalformed: - oSession["ui-backcolor"] = "#E90A05"; - if (bEnforceP3PValidity) - { - oSession.oResponse.headers["MALFORMED-P3P"] = oSession.oResponse.headers["P3P"]; - oSession["X-Privacy"] = "MALFORMED P3P: " + oSession.oResponse.headers["P3P"]; - oSession.oResponse.headers.Remove("P3P"); - } - break; + oSession.oResponse.headers["MALFORMED-P3P"] = oSession.oResponse.headers["P3P"]; + oSession["X-Privacy"] = "MALFORMED P3P: " + oSession.oResponse.headers["P3P"]; + oSession.oResponse.headers.Remove("P3P"); } - } - public void AutoTamperRequestBefore(Session oSession) { } - public void AutoTamperRequestAfter(Session oSession){ /*noop*/ } - public void AutoTamperResponseAfter(Session oSession) {/*noop*/} - public void AutoTamperResponseBefore(Session oSession) { /*noop*/ } - public void OnBeforeReturningError(Session oSession) {/*noop*/} + break; } + } + public void AutoTamperRequestBefore(Session oSession) { } + public void AutoTamperRequestAfter(Session oSession){ /*noop*/ } + public void AutoTamperResponseAfter(Session oSession) {/*noop*/} + public void AutoTamperResponseBefore(Session oSession) { /*noop*/ } + public void OnBeforeReturningError(Session oSession) {/*noop*/} +} + +``` -See Also --------- +## See Also -+ [View Cookie Information]({%slug CookieScanning%}) -+ [Rename Invalid P3P Headers]({%slug RenameInvalidP3P%}) ++ [View Cookie Information](slug://CookieScanning) ++ [Rename Invalid P3P Headers](slug://RenameInvalidP3P) diff --git a/extend-fiddler/createextension.md b/extend-fiddler/createextension.md index 74ec19c..18762de 100644 --- a/extend-fiddler/createextension.md +++ b/extend-fiddler/createextension.md @@ -5,13 +5,11 @@ publish: true position: 3 --- -Create Fiddler Classic Extension Project -================================ +# Create Fiddler Classic Extension Project Follow these steps to create a sample Fiddler Classic Extension that modifies the User-Agent string of all outbound requests: -Add Reference to Fiddler ------------------------- +## Add Reference to Fiddler 1. Start **Visual Studio 2005** or later. @@ -23,8 +21,7 @@ Add Reference to Fiddler 5. Click **Ok** to add the reference. -Add Reference to System.Windows.Forms -------------------------------------- +## Add Reference to System.Windows.Forms If your extension modifies Fiddler's UI: @@ -34,8 +31,7 @@ If your extension modifies Fiddler's UI: 3. Click **Ok** to add the reference. -Add Build Event ---------------- +## Add Build Event 1. In the **Solution Explorer**, right click the project. @@ -45,50 +41,49 @@ Add Build Event 4. Add the following to the **Post-build event command line**: - copy "$(TargetPath)" "%userprofile%\Documents\Fiddler2\Scripts\$(TargetFilename)" +```bash +copy "$(TargetPath)" "%userprofile%\Documents\Fiddler2\Scripts\$(TargetFilename)" +``` -Implement a Fiddler Classic Interface ----------------------------------- +## Implement a Fiddler Classic Interface Modify the default **class1.cs** (or create a new class) in your project as follows: - using System; - using System.Windows.Forms; - using Fiddler; +```c# +using System; +using System.Windows.Forms; +using Fiddler; - [assembly: Fiddler.RequiredVersion("2.3.5.0")] +[assembly: Fiddler.RequiredVersion("2.3.5.0")] - public class Violin : IAutoTamper // Ensure class is public, or Fiddler Classic won't see it! - { - string sUserAgent = ""; +public class Violin : IAutoTamper // Ensure class is public, or Fiddler Classic won't see it! +{ + string sUserAgent = ""; - public Violin(){ - /* NOTE: It's possible that Fiddler Classic UI isn't fully loaded yet, so don't add any UI in the constructor. + public Violin(){ + /* NOTE: It's possible that Fiddler Classic UI isn't fully loaded yet, so don't add any UI in the constructor. - But it's also possible that AutoTamper* methods are called before OnLoad (below), so be - sure any needed data structures are initialized to safe values here in this constructor */ - - sUserAgent = "Violin"; - } + But it's also possible that AutoTamper* methods are called before OnLoad (below), so be + sure any needed data structures are initialized to safe values here in this constructor */ - public void OnLoad(){ /* Load your UI here */ } - public void OnBeforeUnload() { } + sUserAgent = "Violin"; + } - public void AutoTamperRequestBefore(Session oSession){ - oSession.oRequest["User-Agent"] = sUserAgent; - } - public void AutoTamperRequestAfter(Session oSession){} - public void AutoTamperResponseBefore(Session oSession){} - public void AutoTamperResponseAfter(Session oSession){} - public void OnBeforeReturningError(Session oSession){} - } + public void OnLoad(){ /* Load your UI here */ } + public void OnBeforeUnload() { } -See [Fiddler Classic Interfaces][1]. + public void AutoTamperRequestBefore(Session oSession){ + oSession.oRequest["User-Agent"] = sUserAgent; + } + public void AutoTamperRequestAfter(Session oSession){} + public void AutoTamperResponseBefore(Session oSession){} + public void AutoTamperResponseAfter(Session oSession){} + public void OnBeforeReturningError(Session oSession){} +} +``` -Compile and Load Extension --------------------------- -[Compile and Load Your Extension in Fiddler Classic][2] +See [Fiddler Classic Interfaces](slug://Interfaces). -[1]: ./Interfaces -[2]: ./LoadExtension -[3]: ./LoadExtension +## Compile and Load Extension + +[Compile and Load Your Extension in Fiddler Classic](slug://LoadExtension) diff --git a/extend-fiddler/custominspector.md b/extend-fiddler/custominspector.md index 27021d0..7857c53 100644 --- a/extend-fiddler/custominspector.md +++ b/extend-fiddler/custominspector.md @@ -5,26 +5,27 @@ publish: true position: 5 --- -Build a Custom Inspector -======================== +# Build a Custom Inspector -1. Create a [Fiddler Classic extension project][1]. +1. Create a [Fiddler Classic extension project](slug://CreateExtension). 2. Change the code to derive from the **Inspector2** class and implement either **IResponseInspector2** or **IRequestInspector2**. - using Fiddler; + ```c# + using Fiddler; - [assembly: Fiddler.RequiredVersion("2.3.0.0")] + [assembly: Fiddler.RequiredVersion("2.3.0.0")] - public class WebViewer: Inspector2, IResponseInspector2 + public class WebViewer: Inspector2, IResponseInspector2 + { + public WebViewer() { - public WebViewer() - { - // - // TODO: Add constructor logic here - // - } + // + // TODO: Add constructor logic here + // } + } + ``` 3. Inside the class, create a new method. By typing **public override**, you'll get an autocomplete list of the methods you need to write. @@ -34,7 +35,4 @@ Build a Custom Inspector 6. In the **body{ set }** and **headers{ set }** properties, you should update your control's visual representation of the request or response. -7. [Compile and load your extension in Fiddler][2]. - -[1]: ./CreateExtension -[2]: ./LoadExtension \ No newline at end of file +7. [Compile and load your extension in Fiddler](slug://LoadExtension). \ No newline at end of file diff --git a/extend-fiddler/extendwithdotnet.md b/extend-fiddler/extendwithdotnet.md index 67dd946..cfda070 100644 --- a/extend-fiddler/extendwithdotnet.md +++ b/extend-fiddler/extendwithdotnet.md @@ -6,13 +6,11 @@ publish: true position: 1 --- -Extend Fiddler Classic with .NET Code -============================= +# Extend Fiddler Classic with .NET Code Use Fiddler's extensibility mechanisms to add to Fiddler's UI, automatically modify requests or responses, and create custom Inspectors that enable scenario-specific display and manual-modification of requests and responses. -Requirements ------------- +## Requirements + **Visual Studio .NET 2005+** or the **free .NET Framework v2 command-line compilers** + The most recent version of **Fiddler** @@ -20,35 +18,33 @@ Requirements + If targeting **.NET Framework 3.5**: Ensure user has **.NET Framework 3.5** installed. + If extending **64bit Fiddler**: Target **AnyCPU**. -See [Build extension assemblies to run in both Fiddler Classic versions 2 and 4][1]. +See [Build extension assemblies to run in both Fiddler Classic versions 2 and 4](slug://ExtensionsForv2Andv4). -Debugging ---------- +## Debugging -+ To ensure that exceptions and other extension-related errors are not silently caught: [set][1] the `fiddler.debug.extensions.showerrors` preference to **True**. -+ To output logging information to the **Log** tab: [set][1] the `fiddler.debug.extensions.verbose` ++ To ensure that exceptions and other extension-related errors are not silently caught: [set](slug://ExtensionsForv2Andv4) the `fiddler.debug.extensions.showerrors` preference to **True**. ++ To output logging information to the **Log** tab: set the `fiddler.debug.extensions.verbose` -[1]: http://fiddler.wikidot.com/prefsaction - -Direct Fiddler Classic to load extension assemblies -------------------------------------------- +## Direct Fiddler Classic to load extension assemblies + To make the extensions available to the current user, install extension assembly DLLs to: - %localappdata%\Programs\Fiddler\Scripts - OR - %userprofile%\Documents\Fiddler2\Scripts - -+ Set the **Fiddler.RequiredVersion** attribute in your **AssemblyInfo.cs** file (or elsewhere in your code) as follows: - using Fiddler; +```txt +%localappdata%\Programs\Fiddler\Scripts +OR +%userprofile%\Documents\Fiddler2\Scripts +``` - // Extension requires Fiddler Classic 2.2.8.6+ because it uses types introduced in v2.2.8... - [assembly: Fiddler.RequiredVersion("2.2.8.6")] ++ Set the **Fiddler.RequiredVersion** attribute in your **AssemblyInfo.cs** file (or elsewhere in your code) as follows: +```c# +using Fiddler; +// Extension requires Fiddler Classic 2.2.8.6+ because it uses types introduced in v2.2.8... +[assembly: Fiddler.RequiredVersion("2.2.8.6")] +``` -Sample Extension: Step by Step ------------------------------- +## Sample Extension: Step by Step 1. Start **Visual Studio 2005** or later. @@ -68,39 +64,41 @@ Sample Extension: Step by Step + In the Solution Explorer, right click the project. Choose Properties. + On the Build Events tab, add the following to the Post-build event command line: - copy "$(TargetPath)" "%userprofile%\Documents\Fiddler2\Scripts\$(TargetFilename)" +```c# +copy "$(TargetPath)" "%userprofile%\Documents\Fiddler2\Scripts\$(TargetFilename)" +``` Modify the default class1.cs (or create a new class) in your project as follows: - using System; - using System.Windows.Forms; - using Fiddler; - - [assembly: Fiddler.RequiredVersion("2.3.5.0")] - - public class Violin : IAutoTamper // Ensure class is public, or Fiddler won't see it! - { - string sUserAgent = ""; - - public Violin(){ - /* NOTE: It's possible that Fiddler Classic UI isn't fully loaded yet, so don't add any UI in the constructor. - - But it's also possible that AutoTamper* methods are called before OnLoad (below), so be - sure any needed data structures are initialized to safe values here in this constructor */ - - sUserAgent = "Violin"; - } - - public void OnLoad(){ /* Load your UI here */ } - public void OnBeforeUnload() { } +```c# +using System; +using System.Windows.Forms; +using Fiddler; + +[assembly: Fiddler.RequiredVersion("2.3.5.0")] + +public class Violin : IAutoTamper // Ensure class is public, or Fiddler won't see it! +{ + string sUserAgent = ""; + + public Violin(){ + /* NOTE: It's possible that Fiddler Classic UI isn't fully loaded yet, so don't add any UI in the constructor. + + But it's also possible that AutoTamper* methods are called before OnLoad (below), so be + sure any needed data structures are initialized to safe values here in this constructor */ - public void AutoTamperRequestBefore(Session oSession){ - oSession.oRequest["User-Agent"] = sUserAgent; - } - public void AutoTamperRequestAfter(Session oSession){} - public void AutoTamperResponseBefore(Session oSession){} - public void AutoTamperResponseAfter(Session oSession){} - public void OnBeforeReturningError(Session oSession){} + sUserAgent = "Violin"; } -[1]: ./ExtensionsForv2Andv4 + public void OnLoad(){ /* Load your UI here */ } + public void OnBeforeUnload() { } + + public void AutoTamperRequestBefore(Session oSession){ + oSession.oRequest["User-Agent"] = sUserAgent; + } + public void AutoTamperRequestAfter(Session oSession){} + public void AutoTamperResponseBefore(Session oSession){} + public void AutoTamperResponseAfter(Session oSession){} + public void OnBeforeReturningError(Session oSession){} +} +``` \ No newline at end of file diff --git a/extend-fiddler/extensionsforv2andv4.md b/extend-fiddler/extensionsforv2andv4.md index 1b28874..4d87610 100644 --- a/extend-fiddler/extensionsforv2andv4.md +++ b/extend-fiddler/extensionsforv2andv4.md @@ -5,21 +5,22 @@ publish: true position: 11 --- -Build Extension Assemblies for Fiddler Classic v2 and v4 -================================================ +# Build Extension Assemblies for Fiddler Classic v2 and v4 + If you want your extension Assembly to run in both Fiddler2 and Fiddler4, build it for .NET Framework v2 and avoid taking any dependencies on any classes that were removed or moved in the later version of the Framework. (The only instance I'm aware of is the Microsoft JScript.NET code compiler, whose classes were moved around a bit). - You'll also need to ensure that if you use any methods that are deprecated (for example, calling **Assembly.LoadFrom** with the overload that takes an **Evidence** parameter) you do so only conditionally. For example: + You'll also need to ensure that if you use any methods that are deprecated (for example, calling `Assembly.LoadFrom` with the overload that takes an `Evidence` parameter) you do so only conditionally. For example: - if (CONFIG.bRunningOnCLRv4) - { - a = Assembly.LoadFrom(oFile.FullName); - } - else - { - a = Assembly.LoadFrom(oFile.FullName, evidenceFiddler); - } +```c# +if (CONFIG.bRunningOnCLRv4) +{ + a = Assembly.LoadFrom(oFile.FullName); +} +else +{ + a = Assembly.LoadFrom(oFile.FullName, evidenceFiddler); +} +``` All of the extensions from the Fiddler Classic website are compiled against Fiddler Classic v2. @@ -27,19 +28,23 @@ Build Extension Assemblies for Fiddler Classic v2 and v4 This is how Fiddler Classic itself is built. Basically, just add a "clone" version of your v2-targeted Project to the same Solution. Use the **Add > Existing Item** context menu to add the .CS files from the v2-targeted project to the v4-targeted project, but when selecting the files, be very sure to use the split button on the file picker dialog and choose **Add as Link**. On the v4 Project's **Properties > Build** tab, add a **Conditional Compilation** symbol like DOTNET4. You can then put any .NETv4-specific code behind conditional compilation: - #if DOTNET4 +```c# +#if DOTNET4 - // ... code targeting .NETv4 +// ... code targeting .NETv4 - #else +#else - // ... code targeting .NETv2 +// ... code targeting .NETv2 - #endif +#endif +``` Your extension may install the appropriately-targeted version based on the content of the **InstalledVersion** registry key found inside: - HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fiddler2 +```txt +HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fiddler2 +``` The .NET2 version of Fiddler Classic is much more popular than the .NETv4 version at this time. When the .NET Framework v4.5 is released, I may move the v4 project over to v4.5. Among other things, that would allow me to take advantage of the new built-in .ZIP classes in that later framework. @@ -47,6 +52,8 @@ Build Extension Assemblies for Fiddler Classic v2 and v4 Fiddler Classic v4 is "smart"-- if your extension specifies - [assembly: Fiddler.RequiredVersion("2.1.0.1")] +```txt +[assembly: Fiddler.RequiredVersion("2.1.0.1")] +``` When Fiddler Classic v4 loads it, it will require version 4.3.9.9 or later. \ No newline at end of file diff --git a/extend-fiddler/importerexporterinterfaces.md b/extend-fiddler/importerexporterinterfaces.md index 33b8dc4..e29df18 100644 --- a/extend-fiddler/importerexporterinterfaces.md +++ b/extend-fiddler/importerexporterinterfaces.md @@ -5,55 +5,53 @@ publish: true position: 7 --- -Importer and Exporter Interfaces -================================ +# Importer and Exporter Interfaces -Thread Safety and FiddlerCore ------------------------------ +## Thread Safety and FiddlerCore -+ Currently, the **ISessionImporter** and **ISessionExporter** interfaces are called on the **MAIN** UI thread. This is almost certain to change in the future, so you should ensure that your classes are thread safe and that they do not attempt to directly manipulate the Fiddler Classic UI. ++ Currently, the `ISessionImporter` and `ISessionExporter` interfaces are called on the **MAIN** UI thread. This is almost certain to change in the future, so you should ensure that your classes are thread safe and that they do not attempt to directly manipulate the Fiddler Classic UI. + Manipulation of the Fiddler Classic UI is further ill-advised because Fiddler Classic itself may not be loaded; FiddlerCore may be hosting your Importer/Exporter directly. In order to support FiddlerCore, it's advised that you support the Filename key (with string value of a fully-qualified path) in the dictOptions parameter, and consider supporting a Silent key (value as boolean) as well. -The ISessionImporter Interface ------------------------------- +## The ISessionImporter Interface -Extensions that implement the **ISessionImporter** interface (which implements the **IDisposable** interface) are called when the user uses the **File > Import** menu option. +Extensions that implement the `ISessionImporter` interface (which implements the `IDisposable` interface) are called when the user uses the **File > Import** menu option. - public interface ISessionImporter : IDisposable - { - Session[] ImportSessions(string sImportFormat, Dictionary dictOptions, - EventHandler evtProgressNotifications); - } +```c# +public interface ISessionImporter : IDisposable +{ + Session[] ImportSessions(string sImportFormat, Dictionary dictOptions, + EventHandler evtProgressNotifications); +} -The method returns an array of **Session** objects created from the Import of the data. +``` -The **dictOptions** dictionary may be null, or may contain a set of string-keyed objects. Most importers support specification of a filename. For example: +The method returns an array of `Session` objects created from the Import of the data. - dictOptions["Filename"] = "C:\\test.file" +The `dictOptions` dictionary may be null, or may contain a set of string-keyed objects. Most importers support specification of a filename. For example: -The ISessionExporter Interface ------------------------------- +```c# +dictOptions["Filename"] = "C:\\test.file" +``` + +## The ISessionExporter Interface This class is defined by Fiddler Classic and allows you to report on the progress of an import or export operation. If the completion ratio cannot be determined, simply pass 0 or a "guess" between 0 and 1.0. -If the Cancel flag is set on the **ProgressCallbackEventArgs** object after being passed to the **evtProgressNotifications** callback, import or export should gracefully terminate as soon as possible. - - public class ProgressCallbackEventArgs: EventArgs - { - public ProgressCallbackEventArgs(float flCompletionRatio, string sProgressText) - public string ProgressText { get; } - public string PercentComplete { get; } - public bool Cancel { get; set; } - } - -See Also --------- - -+ [Build a Custom Importer or Exporter][1] +If the Cancel flag is set on the `ProgressCallbackEventArgs` object after being passed to the `evtProgressNotifications` callback, import or export should gracefully terminate as soon as possible. -[1]: ./BuildImporterExporter +```c# +public class ProgressCallbackEventArgs: EventArgs +{ + public ProgressCallbackEventArgs(float flCompletionRatio, string sProgressText) + public string ProgressText { get; } + public string PercentComplete { get; } + public bool Cancel { get; set; } +} +``` +## See Also ++ [Build a Custom Importer or Exporter](slug://BuildImporterExporter) \ No newline at end of file diff --git a/extend-fiddler/interfaces.md b/extend-fiddler/interfaces.md index ffe9ed0..618bb9b 100644 --- a/extend-fiddler/interfaces.md +++ b/extend-fiddler/interfaces.md @@ -5,97 +5,102 @@ publish: true position: 2 --- -Implement Fiddler Classic Interfaces -============================ +# Implement Fiddler Classic Interfaces Implement Fiddler Classic interfaces to load your assembly during Fiddler Classic execution. -Load Extension During Startup ------------------------------ +## Load Extension During Startup Public classes in your assembly that implement the **IFiddlerExtension** interface will be loaded by Fiddler Classic during startup. - public interface IFiddlerExtension - { - // Called when Fiddler Classic User Interface is fully available - void OnLoad(); +```c# +public interface IFiddlerExtension +{ + // Called when Fiddler Classic User Interface is fully available + void OnLoad(); - // Called when Fiddler Classic is shutting down - void OnBeforeUnload(); - } + // Called when Fiddler Classic is shutting down + void OnBeforeUnload(); +} +``` + The **OnLoad** function will be called when Fiddler Classic has finished loading and its UI is fully available. At this point, you can safely add menu items, tabbed pages, or other elements to the Fiddler Classic UI. + The **OnBeforeUnload** function will be called when Fiddler Classic is shutting down and unloading all extensions. -Call Extension for Each Web Request ------------------------------------ +## Call Extension for Each Web Request + Extensions that implement the **IAutoTamper** interface (which extends **IFiddlerExtension**) are called for each HTTP/HTTPS request and response, enabling modifications, logging, or other operations. - ***Warning***: Functions in this interface are called on background, non-UI threads. To update UI, use **Invoke** or **BeginInvoke** to update the UI. Also, note that the IAutoTamper::* functions may be called before the **OnLoad** event is called-- Fiddler Classic allows traffic to flow before the UI is fully available. + >important: Functions in this interface are called on background, non-UI threads. To update UI, use **Invoke** or **BeginInvoke** to update the UI. Also, note that the IAutoTamper::* functions may be called before the **OnLoad** event is called-- Fiddler Classic allows traffic to flow before the UI is fully available. - public interface IAutoTamper : IFiddlerExtension - { - // Called before the user can edit a request using the Fiddler Classic Inspectors - void AutoTamperRequestBefore(Session oSession); +```c# +public interface IAutoTamper : IFiddlerExtension +{ + // Called before the user can edit a request using the Fiddler Classic Inspectors + void AutoTamperRequestBefore(Session oSession); - // Called after the user has had the chance to edit the request using the Fiddler Classic Inspectors, but before the request is sent - void AutoTamperRequestAfter(Session oSession); + // Called after the user has had the chance to edit the request using the Fiddler Classic Inspectors, but before the request is sent + void AutoTamperRequestAfter(Session oSession); - // Called before the user can edit a response using the Fiddler Classic Inspectors, unless streaming. - void AutoTamperResponseBefore(Session oSession); + // Called before the user can edit a response using the Fiddler Classic Inspectors, unless streaming. + void AutoTamperResponseBefore(Session oSession); - // Called after the user edited a response using the Fiddler Classic Inspectors. Not called when streaming. - void AutoTamperResponseAfter(Session oSession); + // Called after the user edited a response using the Fiddler Classic Inspectors. Not called when streaming. + void AutoTamperResponseAfter(Session oSession); - // Called Fiddler returns a self-generated HTTP error (for instance DNS lookup failed, etc) - void OnBeforeReturningError(Session oSession); - } + // Called Fiddler returns a self-generated HTTP error (for instance DNS lookup failed, etc) + void OnBeforeReturningError(Session oSession); +} +``` + Extensions that implement the **IAutoTamper2** interface (which extends **IAutoTamper**) are called when the response headers become available. - /// - /// Interface for AutoTamper extensions that want to "peek" at response headers - /// - public interface IAutoTamper2 : IAutoTamper - { - /// - /// Called when the response headers become available - /// - /// The Session object for which the response headers are available - void OnPeekAtResponseHeaders(Session oSession); - } +```c# +/// +/// Interface for AutoTamper extensions that want to "peek" at response headers +/// +public interface IAutoTamper2 : IAutoTamper +{ +/// +/// Called when the response headers become available +/// +/// The Session object for which the response headers are available +void OnPeekAtResponseHeaders(Session oSession); +} +``` + Extensions that implement the **IAutoTamper3** interface (which extends **IAutoTamper2**) are called when the request headers become available. - /// - /// Interface for AutoTamper extensions that want to "peek" at request headers - /// - public interface IAutoTamper3 : IAutoTamper2 - { - /// - /// Called when the request headers become available - /// - /// The Session object for which the request headers are available - void OnPeekAtRequestHeaders(Session oSession); - } - -Call Extension When User Enters a QuickExec Command ---------------------------------------------------- - -+ Extensions that implement the **IHandleExecAction** interface are called when the user has entered a command into the [QuickExec box][1]. To react to the command (and prevent further processing by other extensions and Fiddler Classic itself) return true from this method. - - public interface IHandleExecAction - { - // return TRUE if handled. - bool OnExecAction(string sCommand); - } +```c# +/// +/// Interface for AutoTamper extensions that want to "peek" at request headers +/// +public interface IAutoTamper3 : IAutoTamper2 +{ +/// +/// Called when the request headers become available +/// +/// The Session object for which the request headers are available +void OnPeekAtRequestHeaders(Session oSession); +} +``` + +## Call Extension When User Enters a QuickExec Command + ++ Extensions that implement the **IHandleExecAction** interface are called when the user has entered a command into the [QuickExec box](slug://QuickExec). To react to the command (and prevent further processing by other extensions and Fiddler Classic itself) return true from this method. + +```c# +public interface IHandleExecAction +{ + // return TRUE if handled. + bool OnExecAction(string sCommand); +} +``` + The Fiddler.Utilities class includes a helper function **Parameterize()** which helps to interpret the sCommand parameter. - [CodeDescription("Tokenize a string into tokens. Delimits on whitespace; Quotation marks are dropped unless preceded by a \ character.")] - public static string[] Parameterize(string sCommand) - - -[1]: ../KnowledgeBase/QuickExec +```c# +[CodeDescription("Tokenize a string into tokens. Delimits on whitespace; Quotation marks are dropped unless preceded by a \ character.")] +public static string[] Parameterize(string sCommand) +``` \ No newline at end of file diff --git a/extend-fiddler/loadextension.md b/extend-fiddler/loadextension.md index 81ebb82..99df166 100644 --- a/extend-fiddler/loadextension.md +++ b/extend-fiddler/loadextension.md @@ -6,8 +6,7 @@ publish: true position: 4 --- -Load Extension in Fiddler -------------------------- +# Load Extension in Fiddler 1. Compile your project. diff --git a/extend-fiddler/passargstotranscoder.md b/extend-fiddler/passargstotranscoder.md index d66e06c..79fd28e 100644 --- a/extend-fiddler/passargstotranscoder.md +++ b/extend-fiddler/passargstotranscoder.md @@ -5,42 +5,43 @@ publish: true position: 9 --- -Passing arguments to the Importer or Exporter Extension -======================================================= +# Passing arguments to the Importer or Exporter Extension -+ Transcoders (objects that implement an [importer or exporter interface][1]) may be passed arguments in a dictionary object. For instance, FiddlerScript can invoke the **HTTPArchive** transcoder, passing in the filename string and maximum response size integers as follows: ++ Transcoders (objects that implement an [importer or exporter interface](slug://ImporterExporterInterfaces)) may be passed arguments in a dictionary object. For instance, FiddlerScript can invoke the **HTTPArchive** transcoder, passing in the filename string and maximum response size integers as follows: - var oSessions = FiddlerApplication.UI.GetAllSessions(); - var oExportOptions = FiddlerObject.createDictionary(); - oExportOptions.Add("Filename", "C:\\users\\ericlaw\\desktop\\out1.har"); - oExportOptions.Add("MaxTextBodyLength", 1024); - oExportOptions.Add("MaxBinaryBodyLength", 16384); - FiddlerApplication.DoExport("HTTPArchive v1.2", oSessions, oExportOptions, null); + ```c# + var oSessions = FiddlerApplication.UI.GetAllSessions(); + var oExportOptions = FiddlerObject.createDictionary(); + oExportOptions.Add("Filename", "C:\\users\\ericlaw\\desktop\\out1.har"); + oExportOptions.Add("MaxTextBodyLength", 1024); + oExportOptions.Add("MaxBinaryBodyLength", 16384); + FiddlerApplication.DoExport("HTTPArchive v1.2", oSessions, oExportOptions, null); + ``` + A transcoder extension may collect these options as follows: - public bool ExportSessions(string sFormat, Session[] oSessions, - Dictionary dictOptions, EventHandler evtProgressNotifications) - { - - //... + ```c# + public bool ExportSessions(string sFormat, Session[] oSessions, + Dictionary dictOptions, EventHandler evtProgressNotifications) + { - if (null != dictOptions) - { - if (dictOptions.ContainsKey("Filename")) - { - sFilename = dictOptions["Filename"] as string; - } + //... - if (dictOptions.ContainsKey("MaxTextBodyLength")) - { - iMaxTextBodyLength = (int)dictOptions["MaxTextBodyLength"]; - } + if (null != dictOptions) + { + if (dictOptions.ContainsKey("Filename")) + { + sFilename = dictOptions["Filename"] as string; + } - if (dictOptions.ContainsKey("MaxBinaryBodyLength")) - { - iMaxBinaryBodyLength = (int)dictOptions["MaxBinaryBodyLength"]; - } - } + if (dictOptions.ContainsKey("MaxTextBodyLength")) + { + iMaxTextBodyLength = (int)dictOptions["MaxTextBodyLength"]; + } -[1]: ./ImporterExporterInterfaces + if (dictOptions.ContainsKey("MaxBinaryBodyLength")) + { + iMaxBinaryBodyLength = (int)dictOptions["MaxBinaryBodyLength"]; + } + } + ``` \ No newline at end of file diff --git a/extend-fiddler/sampleextensions.md b/extend-fiddler/sampleextensions.md index df3dadd..e568bfa 100644 --- a/extend-fiddler/sampleextensions.md +++ b/extend-fiddler/sampleextensions.md @@ -6,10 +6,6 @@ publish: true position: 12 --- -Sample Extensions -================= +# Sample Extensions -To see some sample extensions, view the [Fiddler Classic Add-Ons Page][1] or the [Privacy Scanner Add-On code][2]. - -[1]: http://fiddler2.com/add-ons -[2]: ./CookieExtension +To see some sample extensions, view the [Fiddler Classic Add-Ons Page](https://www.telerik.com/fiddler/add-ons) or the [Privacy Scanner Add-On code](slug://CookieExtension). diff --git a/extend-fiddler/usedotnetinfiddlerscript.md b/extend-fiddler/usedotnetinfiddlerscript.md index 30cd7d2..088ca9f 100644 --- a/extend-fiddler/usedotnetinfiddlerscript.md +++ b/extend-fiddler/usedotnetinfiddlerscript.md @@ -6,42 +6,45 @@ publish: true position: 15 --- -Use .NET Assemblies in FiddlerScript -==================================== +# Use .NET Assemblies in FiddlerScript To use a .NET addon (for this example, a C# addon that modifies the user-agent string): -Add References --------------- +## Add References + 1. Close Fiddler. 2. Save the .NET file (for example, this file called UASimulator.cs): - using System; - using System.Windows.Forms; - using Fiddler; +```c# +using System; +using System.Windows.Forms; +using Fiddler; - namespace FiddlerUtility{ +namespace FiddlerUtility{ - public class UASimulator { - string m_sUAString; - public UASimulator(string s_UAString){ - m_sUAString = s_UAString; - } + public class UASimulator { + string m_sUAString; + public UASimulator(string s_UAString){ + m_sUAString = s_UAString; + } - public bool OverwriteUA(Session oSession){ - oSession.oRequest["User-Agent"] = m_sUAString; - return true; - } - } + public bool OverwriteUA(Session oSession){ + oSession.oRequest["User-Agent"] = m_sUAString; + return true; + } } +} +``` 3. In a VS command prompt, go to the folder where the .CS file is found. 4. Enter the command to create a DLL in the VS command prompt. For example: - csc /target:library /out:c:\UASim.dll UASimulator.cs /reference:"%localappdata%\Programs\Fiddler\fiddler.exe" +```bash +csc /target:library /out:c:\UASim.dll UASimulator.cs /reference:"%localappdata%\Programs\Fiddler\fiddler.exe" +``` 5. In Fiddler, click **Tools > Options**. @@ -49,45 +52,42 @@ Add References 7. In the **References** field, enter the location of the DLL. For example: - C:\UASim.dll - -Update Fiddler Classic Rules --------------------- - -[Add a rule to Fiddler Classic][1] to update your script. For example: +```bash +C:\UASim.dll +``` - import System; - import System.Windows.Forms; - import Fiddler; - import FiddlerUtility; +## Update Fiddler Classic Rules - class Handlers{ +[Add a rule to Fiddler Classic](slug://AddRules) to update your script. For example: - static var UASim = new UASimulator("Mozilla/12.0"); +```c# +import System; +import System.Windows.Forms; +import Fiddler; +import FiddlerUtility; - static function OnBeforeRequest(oSession:Fiddler.Session){ +class Handlers{ - UASim.OverwriteUA(oSession); + static var UASim = new UASimulator("Mozilla/12.0"); - } + static function OnBeforeRequest(oSession:Fiddler.Session){ - static function Main(){ + UASim.OverwriteUA(oSession); - var today: Date = new Date(); + } - FiddlerObject.StatusText = " CustomRules.js was loaded at: " + today; + static function Main(){ - } + var today: Date = new Date(); - } + FiddlerObject.StatusText = " CustomRules.js was loaded at: " + today; -See Also --------- + } -+ [Write code in .NET with the IAutoTamper interface][2] +} +``` -+ [Build assemblies to run in both Fiddler Classic v2 and v4][3] +## See Also -[1]: ./AddRules -[2]: http://fiddler2.com/add-ons -[3]: ./ExtensionsForv2Andv4 \ No newline at end of file ++ [Write code in .NET with the IAutoTamper interface](https://www.telerik.com/fiddler/add-ons) ++ [Build assemblies to run in both Fiddler Classic v2 and v4](slug://ExtensionsForv2Andv4) \ No newline at end of file diff --git a/generate-traffic/composeautoresponder.md b/generate-traffic/composeautoresponder.md new file mode 100644 index 0000000..727f5a6 --- /dev/null +++ b/generate-traffic/composeautoresponder.md @@ -0,0 +1,24 @@ +--- +title: Create traffic with Custom Matching Rules +slug: ComposeAutoresponder +publish: true +position: 2 +previous_url: /generate-traffic/tasks/composeautoresponder +--- + +# Create traffic with custom matching rules + +## Enable Autoresponder + +In the **Autoresponder** tab, check **Enable automatic responses**. + ![Enable Automatic Responses](./images/EnableAutomaticResponses.png) + +## Compose Autoresponder Rules + +At the bottom of the **Autoresponder** tab, under the **Rule Editor**: +1. Type a **match rule** in the top field. +2. Type an **action string** in the bottom field. + ![Rule Editor](./images/RuleEditor.png) + +When **Enable automatic responses** is checked, Fiddler Classic will undertake the action if a captured request URI matches the match rule. + diff --git a/generate-traffic/crawlurls.md b/generate-traffic/crawlurls.md new file mode 100644 index 0000000..c64c2e5 --- /dev/null +++ b/generate-traffic/crawlurls.md @@ -0,0 +1,46 @@ +--- +title: Crawl Sequential URLs +description: Create Fiddler Classic rule for crawling sequential URLs +slug: CrawlURLs +publish: true +position: 7 +previous_url: /generate-traffic/tasks/crawlurls +--- + +# Crawl Sequential URLs +===================== + +[Add a rule to Fiddler](slug://AddRules) with Global scope as follows: + +```c# +public static ToolsAction("Crawl Sequential URLs") +function doCrawl(){ + var sBase: String; + var sInt: String; + + sBase = FiddlerObject.prompt("Enter base URL with ## in place of the start integer", "http://www.example.com/img##.jpg"); + sInt = FiddlerObject.prompt("Start At", "1"); + var iFirst = int.Parse(sInt); + sInt = FiddlerObject.prompt("End At", "12"); + var iLast = int.Parse(sInt); + + for (var x=iFirst; x<=iLast; x++) + { + //Replace 's' with your HTTP Request. Note: \ is a special character in JScript + // If you want to represent a backslash in a string constant, double it like \\ + var s = "GET " + sBase.Replace("##", x.ToString()) + " HTTP/1.0\r\n\r\n"; + var b=false; + while(!b){ + try{ + FiddlerObject.utilIssueRequest(s); + b=true; + } + catch(e){ + var iT = Environment.TickCount + 10000; + FiddlerObject.StatusText = "Waiting 10 sec because we have too many requests outstanding..."; + while (iT > Environment.TickCount){ Application.DoEvents(); } + } + } + } +} +``` \ No newline at end of file diff --git a/generate-traffic/tasks/createnewrequest.md b/generate-traffic/createnewrequest.md similarity index 71% rename from generate-traffic/tasks/createnewrequest.md rename to generate-traffic/createnewrequest.md index ea7760a..c3c2c1d 100644 --- a/generate-traffic/tasks/createnewrequest.md +++ b/generate-traffic/createnewrequest.md @@ -3,20 +3,18 @@ title: Create a new request slug: CreateNewRequest publish: true position: 1 +previous_url: /generate-traffic/tasks/createnewrequest --- -Create a New Request -==================== +# Create a New Request The Composer allows you to craft custom requests to send to a server. You can either create a new request manually, or you can drag and drop a session from the Web Sessions list to create a new request based on the existing request. -Modes ------ +## Modes There are two modes for the Composer. In Parsed mode, you can use the boxes to build up a HTTP(S) request. In Raw mode, you must type in a properly formatted HTTP request yourself. Generally, using Parsed Mode is what you want. -Options -------- +## Options The Options tab exposes options that allow you to customize the behavior of the Composer. @@ -25,29 +23,35 @@ The Options tab exposes options that allow you to customize the behavior of the + **Follow Redirects** causes a HTTP/3xx redirect to trigger a new request, if possible. The Composer will follow up to fiddler.composer.followredirects.max default redirections. + **Automatically Authenticate** causes Fiddler Classic to automatically respond to HTTP/401 and HTTP/407 challenges that use NTLM or Negotiate protocols using the current user's Windows credentials. -Tips and Tricks ---------------- +## Tips and Tricks 1. Use drag-and-drop from the Session List to create a new request based on a previously-captured request. 2. Use a # character in the RequestURL to be prompted for a series of sequentially-numbered URLs to download. If you enter a leading 0 (zero) before the "Start At" value, then all numbers will be padded with leading zeros (if necessary) to get to that width. -For instance, if you have the URL http://www.example.com/#/?a=#, and enter the Start At value as 08 and the End At value as 11, the Composer will request the following URLs: +For instance, if you have the URL `http://www.example.com/#/?a=#`, and enter the Start At value as 08 and the End At value as 11, the Composer will request the following URLs: - http://www.example.com/08/?a=08 - http://www.example.com/09/?a=09 - http://www.example.com/10/?a=10 - http://www.example.com/11/?a=11 +```txt +http://www.example.com/08/?a=08 +http://www.example.com/09/?a=09 +http://www.example.com/10/?a=10 +http://www.example.com/11/?a=11 +``` 3. **Shift+Click** the Execute button to immediately break the new request for further editing using Fiddler's Inspectors -4. Add a dummy header **Fiddler-Encoding: base64** and encode your body using base64 if it contains any binary data. Fiddler Classic will decode the data before transmitting it to the server. +4. Add a dummy header `Fiddler-Encoding: base64` and encode your body using base64 if it contains any binary data. Fiddler Classic will decode the data before transmitting it to the server. -5. Add a dummy header **Fiddler-Host: targettesthost** if you would like Fiddler Classic to send your request to the specified server (http://targettesthost, in this case) while retaining the URL and host header specified elsewhere in the request. This is a convenience method that setS the X-OverrideHost, X-IgnoreCertCNMismatch and X-OverrideGateway flags on the new Session, removing the dummy header before contacting the specified server. +5. Add a dummy header `Fiddler-Host: targettesthost` if you would like Fiddler Classic to send your request to the specified server (`http://targettesthost`, in this case) while retaining the URL and host header specified elsewhere in the request. This is a convenience method that setS the X-OverrideHost, X-IgnoreCertCNMismatch and X-OverrideGateway flags on the new Session, removing the dummy header before contacting the specified server. 6. Click the **Upload File** link to have the composer inject one or more local files into the request body as it is sent to the server. If you would like the uploaded file to be sent as base64 (as you might in an XML post body) insert the token base64 into the string. For instance: - <@INCLUDE base64 *C:\Users\lawrence\Desktop\test.bin*@> +```xml + + <@INCLUDE base64 *C:\Users\lawrence\Desktop\test.bin*@> + + +``` diff --git a/images/ModifyAutoresponder/AutoresponderTab.png b/generate-traffic/images/AutoresponderTab.png similarity index 100% rename from images/ModifyAutoresponder/AutoresponderTab.png rename to generate-traffic/images/AutoresponderTab.png diff --git a/images/ModifyAutoresponder/Checkboxes.png b/generate-traffic/images/Checkboxes.png similarity index 100% rename from images/ModifyAutoresponder/Checkboxes.png rename to generate-traffic/images/Checkboxes.png diff --git a/images/ModifyAutoresponder/DragWebSessions.png b/generate-traffic/images/DragWebSessions.png similarity index 100% rename from images/ModifyAutoresponder/DragWebSessions.png rename to generate-traffic/images/DragWebSessions.png diff --git a/images/ComposeAutoresponder/EnableAutomaticResponses.png b/generate-traffic/images/EnableAutomaticResponses copy 2.png similarity index 100% rename from images/ComposeAutoresponder/EnableAutomaticResponses.png rename to generate-traffic/images/EnableAutomaticResponses copy 2.png diff --git a/images/ModifyAutoresponder/EnableAutomaticResponses.png b/generate-traffic/images/EnableAutomaticResponses copy.png similarity index 100% rename from images/ModifyAutoresponder/EnableAutomaticResponses.png rename to generate-traffic/images/EnableAutomaticResponses copy.png diff --git a/images/ReplayAutoresponder/EnableAutomaticResponses.png b/generate-traffic/images/EnableAutomaticResponses.png similarity index 100% rename from images/ReplayAutoresponder/EnableAutomaticResponses.png rename to generate-traffic/images/EnableAutomaticResponses.png diff --git a/images/ResendRequest/ExecuteButton.png b/generate-traffic/images/ExecuteButton.png similarity index 100% rename from images/ResendRequest/ExecuteButton.png rename to generate-traffic/images/ExecuteButton.png diff --git a/images/ImportExportAutoresponder/ImportRuleset.png b/generate-traffic/images/ImportRuleset.png similarity index 100% rename from images/ImportExportAutoresponder/ImportRuleset.png rename to generate-traffic/images/ImportRuleset.png diff --git a/images/ResendRequest/ReplayMenu.png b/generate-traffic/images/ReplayMenu.png similarity index 100% rename from images/ResendRequest/ReplayMenu.png rename to generate-traffic/images/ReplayMenu.png diff --git a/images/ComposeAutoresponder/RuleEditor.png b/generate-traffic/images/RuleEditor copy 2.png similarity index 100% rename from images/ComposeAutoresponder/RuleEditor.png rename to generate-traffic/images/RuleEditor copy 2.png diff --git a/images/ModifyAutoresponder/RuleEditor.png b/generate-traffic/images/RuleEditor copy 3.png similarity index 100% rename from images/ModifyAutoresponder/RuleEditor.png rename to generate-traffic/images/RuleEditor copy 3.png diff --git a/images/ReplayAutoresponder/RuleEditor.png b/generate-traffic/images/RuleEditor copy.png similarity index 100% rename from images/ReplayAutoresponder/RuleEditor.png rename to generate-traffic/images/RuleEditor copy.png diff --git a/generate-traffic/images/RuleEditor.png b/generate-traffic/images/RuleEditor.png new file mode 100644 index 0000000..53640fa Binary files /dev/null and b/generate-traffic/images/RuleEditor.png differ diff --git a/images/ImportExportAutoresponder/SaveRuleset.png b/generate-traffic/images/SaveRuleset.png similarity index 100% rename from images/ImportExportAutoresponder/SaveRuleset.png rename to generate-traffic/images/SaveRuleset.png diff --git a/images/ResendRequest/Scratchpad.png b/generate-traffic/images/Scratchpad.png similarity index 100% rename from images/ResendRequest/Scratchpad.png rename to generate-traffic/images/Scratchpad.png diff --git a/images/ModifyAutoresponder/SelectRule.png b/generate-traffic/images/SelectRule.png similarity index 100% rename from images/ModifyAutoresponder/SelectRule.png rename to generate-traffic/images/SelectRule.png diff --git a/images/ResendRequest/SelectedSession.png b/generate-traffic/images/SelectedSession.png similarity index 100% rename from images/ResendRequest/SelectedSession.png rename to generate-traffic/images/SelectedSession.png diff --git a/images/ReplayAutoresponder/WebSessionsList.png b/generate-traffic/images/WebSessionsList copy 2.png similarity index 100% rename from images/ReplayAutoresponder/WebSessionsList.png rename to generate-traffic/images/WebSessionsList copy 2.png diff --git a/generate-traffic/images/WebSessionsList copy.png b/generate-traffic/images/WebSessionsList copy.png new file mode 100644 index 0000000..9a9a50a Binary files /dev/null and b/generate-traffic/images/WebSessionsList copy.png differ diff --git a/generate-traffic/images/WebSessionsList.png b/generate-traffic/images/WebSessionsList.png new file mode 100644 index 0000000..9a9a50a Binary files /dev/null and b/generate-traffic/images/WebSessionsList.png differ diff --git a/generate-traffic/importexportautoresponder.md b/generate-traffic/importexportautoresponder.md new file mode 100644 index 0000000..e13ec02 --- /dev/null +++ b/generate-traffic/importexportautoresponder.md @@ -0,0 +1,33 @@ +--- +title: Import or Export Matching Rules +slug: ImportExportAutoresponder +publish: true +position: 5 +previous_url: /generate-traffic/tasks/importexportautoresponder +--- + +# Import or Export Matching Rules + +## Import a matching ruleset + + +From the **Autoresponder** tab: + +1. Click the **Import** button. +2. Select a **.saz** or **.farx** file. + +![Import Ruleset](./images/ImportRuleset.png) + +From **Windows Explorer**: + +1. Select a **.saz** or **.farx** file. +2. Drag and drop the selected file from **Windows Explorer** to the **Autoresponder** tab. + +The **Autoresponder** ruleset will now populate with rules that will replay the sessions from the archive. + +## Export a matching ruleset + +1. From the **Autoresponder** tab, click the **Save** button. +2. Right-click the ruleset and select **Export all**.. + + ![Save ruleset](./images/SaveRuleset.png) diff --git a/generate-traffic/tasks/modifyautoresponder.md b/generate-traffic/modifyautoresponder.md similarity index 63% rename from generate-traffic/tasks/modifyautoresponder.md rename to generate-traffic/modifyautoresponder.md index ef5e571..43bc356 100644 --- a/generate-traffic/tasks/modifyautoresponder.md +++ b/generate-traffic/modifyautoresponder.md @@ -3,48 +3,32 @@ title: Modify Matching Rules slug: ModifyAutoresponder publish: true position: 4 +previous_url: /generate-traffic/tasks/modifyautoresponder --- -Modify Matching Rules -===================== +# Modify Matching Rules -Edit Rule ---------- +## Edit Rule 1. Select a rule from the **Autoresponder** ruleset. - - ![Select Rule][1] - + ![Select Rule](./images/SelectRule.png) 2. At the bottom of the **Autoresponder** tab, under the **Rule Editor**: - 1. Type a **match rule** in the top field. - 2. Type an **action string** in the bottom field. + ![Rule Editor](./images/RuleEditor.png) - ![Rule Editor][2] - -Select Active Rules -------------------- +## Select Active Rules + To enable or disable a rule, click the checkbox next to the rule. - ![Enable or Disable Rule][3] + ![Enable or Disable Rule](./images/Checkboxes.png) -Set rule priority ------------------ +## Set rule priority To change the priority of a rule in the ruleset: 1. Select a rule from the **Autoresponder** rulset. - - ![Select Rule][1] - + ![Select Rule](./images/SelectRule.png) 2. Move the rule up or down in the ruleset: - + Click and drag the rule to the correct location in the ruleset. - + Press **+** to move the rule up in the list or press **-** to move the rule down in the list. - -[1]: ../../images/ModifyAutoresponder/SelectRule.png -[2]: ../../images/ModifyAutoresponder/RuleEditor.png -[3]: ../../images/ModifyAutoresponder/Checkboxes.png diff --git a/generate-traffic/tasks/performance.md b/generate-traffic/performance.md similarity index 62% rename from generate-traffic/tasks/performance.md rename to generate-traffic/performance.md index 6c877c4..e79bac4 100644 --- a/generate-traffic/tasks/performance.md +++ b/generate-traffic/performance.md @@ -4,12 +4,9 @@ description: "Use Fiddler Classic for performance testing - generate traffic, me slug: Performance publish: true position: 6 +previous_url: /generate-traffic/tasks/performance --- -Test Performance -================ +# Test Performance -[Use FiddlerScript to simulate traffic and display performance results][1]. ---------------------------------------------------------------------------- - -[1]: ../../KnowledgeBase/FiddlerScript/PerfTesting +[Use FiddlerScript to simulate traffic and display performance results](slug://PerfTesting). diff --git a/generate-traffic/tasks/replayautoresponder.md b/generate-traffic/replayautoresponder.md similarity index 50% rename from generate-traffic/tasks/replayautoresponder.md rename to generate-traffic/replayautoresponder.md index d10d7b1..d65d4a6 100644 --- a/generate-traffic/tasks/replayautoresponder.md +++ b/generate-traffic/replayautoresponder.md @@ -3,41 +3,31 @@ title: Replay Captured Traffic slug: ReplayAutoresponder publish: true position: 3 +previous_url: /generate-traffic/tasks/replayautoresponder --- -Replay Captured Traffic -================================== +# Replay Captured Traffic -Enable Autoresponder --------------------- +## Enable Autoresponder In the **Autoresponder** tab, check **Enable automatic responses**. - ![Enable Automatic Responses][1] + ![Enable Automatic Responses](./images/EnableAutomaticResponses.png) - -Create matching rules from the Web Sessions List ------------------------------------------------- +## Create matching rules from the Web Sessions List To replay captured responses to matching requests instead of transmitting the request to the destination server: 1. Select sessions in the **Web Sessions List**. Press Control-click to select multiple sessions. - ![Web Sessions List][2] + ![Web Sessions List](./images/WebSessionsList.png) 2. Click the **Autoresponder** tab to the right. - ![Autoresponder Tab][3] + ![Autoresponder Tab](./images/AutoresponderTab.png) 3. Click and drag the selected web sessions from the **Web Sessions List** to the rules list in the **Autoresponder tab**. - ![Drag Web Sessions][4] - -The rules list will now populate with rules that respond to the captured requests with the corresponding captured responses. - - + ![Drag Web Sessions](./images/DragWebSessions.png) -[1]: ../../images/ReplayAutoresponder/EnableAutomaticResponses.png -[2]: ../../images/ReplayAutoresponder/WebSessionsList.png -[3]: ../../images/ReplayAutoresponder/AutoresponderTab.png -[4]: ../../images/ReplayAutoresponder/DragWebSessions.png +The rules list will now populate with rules that respond to the captured requests with the corresponding captured responses. \ No newline at end of file diff --git a/generate-traffic/tasks/resendrequest.md b/generate-traffic/resendrequest.md similarity index 61% rename from generate-traffic/tasks/resendrequest.md rename to generate-traffic/resendrequest.md index 047da2e..ed1d513 100644 --- a/generate-traffic/tasks/resendrequest.md +++ b/generate-traffic/resendrequest.md @@ -4,42 +4,26 @@ description: "Learn to resend captured HTTP requests in Fiddler Classic - modify slug: ResendRequest publish: true position: 8 +previous_url: /generate-traffic/tasks/resendrequest --- -Resend a Request -================ +# Resend a Request You can resend a request directly from the **Sessions List**, or save requests to resend in the **Composer**. -Resend a Request from the Sessions List ---------------------------------------- +## Resend a Request from the Sessions List 1. Select one or more sessions in the Sessions List. - 2. Press **R** or right-click the session(s) and click **Replay > Reissue Requests**. + ![Replay Menu](./images/ReplayMenu.png) - ![Replay Menu][1] - -Resend a Session from the Composer ----------------------------------- +## Resend a Session from the Composer 1. Click the **Composer** tab. - 2. In the Composer tab, click the **Scratchpad** tab. - 3. Click and drag one or more sessions from the Sessions List. - - ![Scratchpad][2] - + ![Scratchpad](./images/Scratchpad.png) 4. Triple-click the content of a session in the Scratchpad to select the entire session contents. - - ![Selected Session][3] - + ![Selected Session](./images/SelectedSession.png) 5. Click **Execute** to reissue the request(s). - - ![Execute button][4] - -[1]: ../../images/ResendRequest/ReplayMenu.png -[2]: ../../images/ResendRequest/Scratchpad.png -[3]: ../../images/ResendRequest/SelectedSession.png -[4]: ../../images/ResendRequest/ExecuteButton.png + ![Execute button](./images/ExecuteButton.png) \ No newline at end of file diff --git a/generate-traffic/searchsequentialpages.md b/generate-traffic/searchsequentialpages.md new file mode 100644 index 0000000..8056dde --- /dev/null +++ b/generate-traffic/searchsequentialpages.md @@ -0,0 +1,54 @@ +--- +title: Search Sequential Pages for Target String +slug: SearchSequentialPages +publish: true +position: 8 +previous_url: /generate-traffic/tasks/searchsequentialpages +--- + +# Search Sequential Pages for Target String + +To search for a target string on a series of successively named HTML pages (for example, to find the first page containing "TargetString" from 1.htm, 2.htm, 3.htm, 4.htm, etc.), [add rules to Fiddler](slug://AddRules) as follows: + +1. Add a rule to Fiddler Classic with Global scope to create a new menu item as follows: + + ```C# + public static ToolsAction("Find page containing search string") + function doGrab(){ + var s = "GET /gallery/image1.htm HTTP/1.1\r\nHost: www.example.com\r\nX-My-Num: 1\r\n\r\n"; + try{ + FiddlerObject.utilIssueRequest(s); + } + catch(e){ + MessageBox.Show("send failed" + e.ToString()); + } + } + ``` + + This will generate the first request. Note: Because the **utilIssueRequest** call is asynchronous, you don't get the response directly. + +2. Add a rule to Fiddler Classic in the **OnBeforeResponse** function as follows: + + ```c# + if (oSession.oRequest.headers.Exists("X-My-Num")){ + // This is a response to my Grab code... + if (oSession.utilFindInResponse("targetstring", false) > -1){ + // If the index of the target string is >-1, we found the search string... + MessageBox.Show("Found target string!"); + } + else + { + //didn't find the target string. increment the number. + var n = int.parse(oSession.oRequest["X-My-Num"]); + n++; + var s = "GET /gallery/image" + n.ToString() + ".htm HTTP/1.1\r\nHost: http://www.example.com\r\nX-My-Num: "+ n.ToString() + "\r\n\r\n"; + try{ + // Make a recursive HTTP request for the next item. + FiddlerObject.utilIssueRequest(s); + } + catch(e){ + MessageBox.Show("send failed" + e.ToString()); + } + } + } + ``` \ No newline at end of file diff --git a/generate-traffic/tasks/composeautoresponder.md b/generate-traffic/tasks/composeautoresponder.md deleted file mode 100644 index f5cf5bb..0000000 --- a/generate-traffic/tasks/composeautoresponder.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Create traffic with Custom Matching Rules -slug: ComposeAutoresponder -publish: true -position: 2 ---- - -Create traffic with custom matching rules -================================== - -Enable Autoresponder --------------------- - -In the **Autoresponder** tab, check **Enable automatic responses**. - - ![Enable Automatic Responses][1] - - -Compose Autoresponder Rules ---------------------------- - -+ At the bottom of the **Autoresponder** tab, under the **Rule Editor**: - - 1. Type a **match rule** in the top field. - - 2. Type an **action string** in the bottom field. - - ![Rule Editor][5] - -When **Enable automatic responses** is checked, Fiddler Classic will undertake the action if a captured request URI matches the match rule. - -See Also --------- - -+ [Autoresponder Reference][6] - -[1]: ../../images/ReplayAutoresponder/EnableAutomaticResponses.png -[2]: ../../images/ReplayAutoresponder/WebSessionsList.png -[5]: ../../images/ReplayAutoresponder/RuleEditor.png -[6]: ../../KnowledgeBase/AutoResponder diff --git a/generate-traffic/tasks/crawlurls.md b/generate-traffic/tasks/crawlurls.md deleted file mode 100644 index 03e4167..0000000 --- a/generate-traffic/tasks/crawlurls.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Crawl Sequential URLs -description: Create Fiddler Classic rule for crawling sequential URLs -slug: CrawlURLs -publish: true -position: 7 ---- - -Crawl Sequential URLs -===================== - -[Add a rule to Fiddler][1] with Global scope as follows: - - public static ToolsAction("Crawl Sequential URLs") - function doCrawl(){ - var sBase: String; - var sInt: String; - - sBase = FiddlerObject.prompt("Enter base URL with ## in place of the start integer", "http://www.example.com/img##.jpg"); - sInt = FiddlerObject.prompt("Start At", "1"); - var iFirst = int.Parse(sInt); - sInt = FiddlerObject.prompt("End At", "12"); - var iLast = int.Parse(sInt); - - for (var x=iFirst; x<=iLast; x++) - { - //Replace 's' with your HTTP Request. Note: \ is a special character in JScript - // If you want to represent a backslash in a string constant, double it like \\ - var s = "GET " + sBase.Replace("##", x.ToString()) + " HTTP/1.0\r\n\r\n"; - var b=false; - while(!b){ - try{ - FiddlerObject.utilIssueRequest(s); - b=true; - } - catch(e){ - var iT = Environment.TickCount + 10000; - FiddlerObject.StatusText = "Waiting 10 sec because we have too many requests outstanding..."; - while (iT > Environment.TickCount){ Application.DoEvents(); } - } - } - } - } - -[1]: ../../Extend-Fiddler/AddRules diff --git a/generate-traffic/tasks/importexportautoresponder.md b/generate-traffic/tasks/importexportautoresponder.md deleted file mode 100644 index 8ab28e9..0000000 --- a/generate-traffic/tasks/importexportautoresponder.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Import or Export Matching Rules -slug: ImportExportAutoresponder -publish: true -position: 5 ---- - -Import or Export Matching Rules -=============================== - -Import a matching ruleset -------------------------- - -+ From the **Autoresponder** tab: - - 1. Click the **Import** button. - - 2. Select a **.saz** or **.farx** file. - - ![Import Ruleset](../../images/ImportExportAutoresponder/ImportRuleset.png) - -+ From **Windows Explorer**: - - 1. Select a **.saz** or **.farx** file. - - 2. Drag and drop the selected file from **Windows Explorer** to the **Autoresponder** tab. - -The **Autoresponder** ruleset will now populate with rules that will replay the sessions from the archive. - -Export a matching ruleset -------------------------- - -1. From the **Autoresponder** tab, click the **Save** button. - -2. Right-click the ruleset and select **Export all**.. - - ![Save ruleset][(../../images/ImportExportAutoresponder/SaveRuleset.png) diff --git a/generate-traffic/tasks/searchsequentialpages.md b/generate-traffic/tasks/searchsequentialpages.md deleted file mode 100644 index bc6f3be..0000000 --- a/generate-traffic/tasks/searchsequentialpages.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Search Sequential Pages for Target String -slug: SearchSequentialPages -publish: true -position: 8 ---- - -Search Sequential Pages for Target String -========================================= - -To search for a target string on a series of successively named HTML pages (for example, to find the first page containing "TargetString" from 1.htm, 2.htm, 3.htm, 4.htm, etc.), [add rules to Fiddler][1] as follows: - -1. Add a rule to Fiddler Classic with Global scope to create a new menu item as follows: - - public static ToolsAction("Find page containing search string") - function doGrab(){ - var s = "GET /gallery/image1.htm HTTP/1.1\r\nHost: www.example.com\r\nX-My-Num: 1\r\n\r\n"; - try{ - FiddlerObject.utilIssueRequest(s); - } - catch(e){ - MessageBox.Show("send failed" + e.ToString()); - } - } - - This will generate the first request. Note: Because the **utilIssueRequest** call is asynchronous, you don't get the response directly. - -2. Add a rule to Fiddler Classic in the **OnBeforeResponse** function as follows: - - if (oSession.oRequest.headers.Exists("X-My-Num")){ - // This is a response to my Grab code... - if (oSession.utilFindInResponse("targetstring", false) > -1){ - // If the index of the target string is >-1, we found the search string... - MessageBox.Show("Found target string!"); - } - else - { - //didn't find the target string. increment the number. - var n = int.parse(oSession.oRequest["X-My-Num"]); - n++; - var s = "GET /gallery/image" + n.ToString() + ".htm HTTP/1.1\r\nHost: http://www.example.com\r\nX-My-Num: "+ n.ToString() + "\r\n\r\n"; - try{ - // Make a recursive HTTP request for the next item. - FiddlerObject.utilIssueRequest(s); - } - catch(e){ - MessageBox.Show("send failed" + e.ToString()); - } - } - } - - -[1]: ../../Extend-Fiddler/AddRules \ No newline at end of file diff --git a/images/CertTrustVista.png b/images/CertTrustVista.png deleted file mode 100644 index aa4716f..0000000 Binary files a/images/CertTrustVista.png and /dev/null differ diff --git a/images/ConfigureForiOS/DownloadFiddlerRootCert.png b/images/ConfigureForiOS/DownloadFiddlerRootCert.png deleted file mode 100644 index d38f554..0000000 Binary files a/images/ConfigureForiOS/DownloadFiddlerRootCert.png and /dev/null differ diff --git a/images/ConfigureForiOS/InstallProfile.png b/images/ConfigureForiOS/InstallProfile.png deleted file mode 100644 index 1cb55d0..0000000 Binary files a/images/ConfigureForiOS/InstallProfile.png and /dev/null differ diff --git a/images/ConfigureForiOS/OnlineTooltip.png b/images/ConfigureForiOS/OnlineTooltip.png deleted file mode 100644 index bf90824..0000000 Binary files a/images/ConfigureForiOS/OnlineTooltip.png and /dev/null differ diff --git a/images/ConfigureForiOS/Warning.png b/images/ConfigureForiOS/Warning.png deleted file mode 100644 index 4cb10e6..0000000 Binary files a/images/ConfigureForiOS/Warning.png and /dev/null differ diff --git a/images/ConfigureForiOS/iOSProxySettings.png b/images/ConfigureForiOS/iOSProxySettings.png deleted file mode 100644 index f63d688..0000000 Binary files a/images/ConfigureForiOS/iOSProxySettings.png and /dev/null differ diff --git a/images/DialupSettings.png b/images/DialupSettings.png deleted file mode 100644 index 1b8e24d..0000000 Binary files a/images/DialupSettings.png and /dev/null differ diff --git a/images/ExamineWebTraffic/SessionsList.png b/images/ExamineWebTraffic/SessionsList.png deleted file mode 100644 index 71c26c4..0000000 Binary files a/images/ExamineWebTraffic/SessionsList.png and /dev/null differ diff --git a/images/FiddlerHowToCertificates.jpg b/images/FiddlerHowToCertificates.jpg deleted file mode 100644 index 5ef2581..0000000 Binary files a/images/FiddlerHowToCertificates.jpg and /dev/null differ diff --git a/images/FiddlerHowToOptionsCertificate.jpg b/images/FiddlerHowToOptionsCertificate.jpg deleted file mode 100644 index 7aced25..0000000 Binary files a/images/FiddlerHowToOptionsCertificate.jpg and /dev/null differ diff --git a/images/FiddlerScriptEditor.png b/images/FiddlerScriptEditor.png deleted file mode 100644 index 4f3a060..0000000 Binary files a/images/FiddlerScriptEditor.png and /dev/null differ diff --git a/images/FiltersReferenceSample.png b/images/FiltersReferenceSample.png deleted file mode 100644 index 6024cb2..0000000 Binary files a/images/FiltersReferenceSample.png and /dev/null differ diff --git a/images/FirefoxCertMgr.jpg b/images/FirefoxCertMgr.jpg deleted file mode 100644 index 7aced25..0000000 Binary files a/images/FirefoxCertMgr.jpg and /dev/null differ diff --git a/images/HTTPS-Trust-1.png b/images/HTTPS-Trust-1.png deleted file mode 100644 index f0cd988..0000000 Binary files a/images/HTTPS-Trust-1.png and /dev/null differ diff --git a/images/IE9RequestHeader/QuickExecCommand.png b/images/IE9RequestHeader/QuickExecCommand.png deleted file mode 100644 index 0d4b6b9..0000000 Binary files a/images/IE9RequestHeader/QuickExecCommand.png and /dev/null differ diff --git a/images/ImportExport/5379177264-150150397-tickets.pdf b/images/ImportExport/5379177264-150150397-tickets.pdf deleted file mode 100644 index 6363866..0000000 Binary files a/images/ImportExport/5379177264-150150397-tickets.pdf and /dev/null differ diff --git a/images/ImportExportDefault/5379177264-150150397-tickets.pdf b/images/ImportExportDefault/5379177264-150150397-tickets.pdf deleted file mode 100644 index 6363866..0000000 Binary files a/images/ImportExportDefault/5379177264-150150397-tickets.pdf and /dev/null differ diff --git a/images/ImportExportDefault/AdjustAppCacheManifest.png b/images/ImportExportDefault/AdjustAppCacheManifest.png deleted file mode 100644 index db9f6b6..0000000 Binary files a/images/ImportExportDefault/AdjustAppCacheManifest.png and /dev/null differ diff --git a/images/ImportExportDefault/BaseURL.png b/images/ImportExportDefault/BaseURL.png deleted file mode 100644 index 481e053..0000000 Binary files a/images/ImportExportDefault/BaseURL.png and /dev/null differ diff --git a/images/ImportExportDefault/SelectExportFormat.png b/images/ImportExportDefault/SelectExportFormat.png deleted file mode 100644 index 000bf35..0000000 Binary files a/images/ImportExportDefault/SelectExportFormat.png and /dev/null differ diff --git a/images/ImportExportDefault/SelectImportFormat.png b/images/ImportExportDefault/SelectImportFormat.png deleted file mode 100644 index 5c5d37b..0000000 Binary files a/images/ImportExportDefault/SelectImportFormat.png and /dev/null differ diff --git a/images/ModifyAutoresponder/WebSessionsList.png b/images/ModifyAutoresponder/WebSessionsList.png deleted file mode 100644 index 51a491b..0000000 Binary files a/images/ModifyAutoresponder/WebSessionsList.png and /dev/null differ diff --git a/images/ReplayAutoresponder/AutoresponderTab.png b/images/ReplayAutoresponder/AutoresponderTab.png deleted file mode 100644 index ddf8c3a..0000000 Binary files a/images/ReplayAutoresponder/AutoresponderTab.png and /dev/null differ diff --git a/images/ReplayAutoresponder/DragWebSessions.png b/images/ReplayAutoresponder/DragWebSessions.png deleted file mode 100644 index bd23b14..0000000 Binary files a/images/ReplayAutoresponder/DragWebSessions.png and /dev/null differ diff --git a/images/TBFilter.png b/images/TBFilter.png deleted file mode 100644 index f008869..0000000 Binary files a/images/TBFilter.png and /dev/null differ diff --git a/images/UseFiddlerAsReverseProxy/AllowRemoteComputersToConnect.png b/images/UseFiddlerAsReverseProxy/AllowRemoteComputersToConnect.png deleted file mode 100644 index bc6562b..0000000 Binary files a/images/UseFiddlerAsReverseProxy/AllowRemoteComputersToConnect.png and /dev/null differ diff --git a/images/ViewSessionContent/ExamineWebTraffic/Inspectors.png b/images/ViewSessionContent/ExamineWebTraffic/Inspectors.png deleted file mode 100644 index 8898bd5..0000000 Binary files a/images/ViewSessionContent/ExamineWebTraffic/Inspectors.png and /dev/null differ diff --git a/images/ViewSessionContent/ExamineWebTraffic/SessionsList.png b/images/ViewSessionContent/ExamineWebTraffic/SessionsList.png deleted file mode 100644 index 71c26c4..0000000 Binary files a/images/ViewSessionContent/ExamineWebTraffic/SessionsList.png and /dev/null differ diff --git a/images/ViewSessionContent/ExamineWebTraffic/Statistics.png b/images/ViewSessionContent/ExamineWebTraffic/Statistics.png deleted file mode 100644 index ac7ad89..0000000 Binary files a/images/ViewSessionContent/ExamineWebTraffic/Statistics.png and /dev/null differ diff --git a/images/ViewSessionContent/ExamineWebTraffic/Timeline.png b/images/ViewSessionContent/ExamineWebTraffic/Timeline.png deleted file mode 100644 index 74ca2ad..0000000 Binary files a/images/ViewSessionContent/ExamineWebTraffic/Timeline.png and /dev/null differ diff --git a/images/ViewSessionContent/Inspectors.png b/images/ViewSessionContent/Inspectors.png deleted file mode 100644 index 8898bd5..0000000 Binary files a/images/ViewSessionContent/Inspectors.png and /dev/null differ diff --git a/images/ViewSessionContent/SessionsList.png b/images/ViewSessionContent/SessionsList.png deleted file mode 100644 index 71c26c4..0000000 Binary files a/images/ViewSessionContent/SessionsList.png and /dev/null differ diff --git a/images/ViewSessionContent/Statistics.png b/images/ViewSessionContent/Statistics.png deleted file mode 100644 index ac7ad89..0000000 Binary files a/images/ViewSessionContent/Statistics.png and /dev/null differ diff --git a/images/ViewSessionContent/Timeline.png b/images/ViewSessionContent/Timeline.png deleted file mode 100644 index 74ca2ad..0000000 Binary files a/images/ViewSessionContent/Timeline.png and /dev/null differ diff --git a/images/ViewSessionStatistics/Inspectors.png b/images/ViewSessionStatistics/Inspectors.png deleted file mode 100644 index 8898bd5..0000000 Binary files a/images/ViewSessionStatistics/Inspectors.png and /dev/null differ diff --git a/images/ViewSessionStatistics/SessionsList.png b/images/ViewSessionStatistics/SessionsList.png deleted file mode 100644 index 71c26c4..0000000 Binary files a/images/ViewSessionStatistics/SessionsList.png and /dev/null differ diff --git a/images/ViewSessionStatistics/Statistics.png b/images/ViewSessionStatistics/Statistics.png deleted file mode 100644 index ac7ad89..0000000 Binary files a/images/ViewSessionStatistics/Statistics.png and /dev/null differ diff --git a/images/ViewSessionStatistics/Timeline.png b/images/ViewSessionStatistics/Timeline.png deleted file mode 100644 index 74ca2ad..0000000 Binary files a/images/ViewSessionStatistics/Timeline.png and /dev/null differ diff --git a/images/ViewSessionSummary/Inspectors.png b/images/ViewSessionSummary/Inspectors.png deleted file mode 100644 index 8898bd5..0000000 Binary files a/images/ViewSessionSummary/Inspectors.png and /dev/null differ diff --git a/images/ViewSessionSummary/SessionsList.png b/images/ViewSessionSummary/SessionsList.png deleted file mode 100644 index 71c26c4..0000000 Binary files a/images/ViewSessionSummary/SessionsList.png and /dev/null differ diff --git a/images/ViewSessionSummary/Statistics.png b/images/ViewSessionSummary/Statistics.png deleted file mode 100644 index ac7ad89..0000000 Binary files a/images/ViewSessionSummary/Statistics.png and /dev/null differ diff --git a/images/ViewSessionSummary/Timeline.png b/images/ViewSessionSummary/Timeline.png deleted file mode 100644 index 74ca2ad..0000000 Binary files a/images/ViewSessionSummary/Timeline.png and /dev/null differ diff --git a/images/ViewWebTraffic.png b/images/ViewWebTraffic.png deleted file mode 100644 index d375721..0000000 Binary files a/images/ViewWebTraffic.png and /dev/null differ diff --git a/images/WindowsCertMgr.jpg b/images/WindowsCertMgr.jpg deleted file mode 100644 index 5ef2581..0000000 Binary files a/images/WindowsCertMgr.jpg and /dev/null differ diff --git a/images/anchor.png b/images/anchor.png deleted file mode 100644 index 774cc96..0000000 Binary files a/images/anchor.png and /dev/null differ diff --git a/images/api.png b/images/api.png deleted file mode 100644 index 2c0acda..0000000 Binary files a/images/api.png and /dev/null differ diff --git a/images/arrow.png b/images/arrow.png deleted file mode 100644 index 9c5cce7..0000000 Binary files a/images/arrow.png and /dev/null differ diff --git a/images/blockedcert.png b/images/blockedcert.png deleted file mode 100644 index 08a6ed5..0000000 Binary files a/images/blockedcert.png and /dev/null differ diff --git a/images/blockedcert2.gif b/images/blockedcert2.gif deleted file mode 100644 index a720ac7..0000000 Binary files a/images/blockedcert2.gif and /dev/null differ diff --git a/images/close-btn.svg b/images/close-btn.svg deleted file mode 100644 index 69d57f2..0000000 --- a/images/close-btn.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/images/close.png b/images/close.png deleted file mode 100644 index 32968a7..0000000 Binary files a/images/close.png and /dev/null differ diff --git a/images/column.png b/images/column.png deleted file mode 100644 index 3115701..0000000 Binary files a/images/column.png and /dev/null differ diff --git a/images/common/avatar-ninja.svg b/images/common/avatar-ninja.svg new file mode 100644 index 0000000..4c88dee --- /dev/null +++ b/images/common/avatar-ninja.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/common/no-results.svg b/images/common/no-results.svg new file mode 100644 index 0000000..9fe0515 --- /dev/null +++ b/images/common/no-results.svg @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/external.png b/images/external.png deleted file mode 100644 index ac186fe..0000000 Binary files a/images/external.png and /dev/null differ diff --git a/images/ffAutoconfig.jpg b/images/ffAutoconfig.jpg deleted file mode 100644 index 7eb624a..0000000 Binary files a/images/ffAutoconfig.jpg and /dev/null differ diff --git a/images/ffimportui.png b/images/ffimportui.png deleted file mode 100644 index f28fa5b..0000000 Binary files a/images/ffimportui.png and /dev/null differ diff --git a/images/fiddler.png b/images/fiddler.png deleted file mode 100644 index e5c28a3..0000000 Binary files a/images/fiddler.png and /dev/null differ diff --git a/images/fiddler.svg b/images/fiddler.svg deleted file mode 100644 index 8ae2cad..0000000 --- a/images/fiddler.svg +++ /dev/null @@ -1 +0,0 @@ -PrgsFiddler \ No newline at end of file diff --git a/images/fiddlerCap.png b/images/fiddlerCap.png deleted file mode 100644 index 5d6cb23..0000000 Binary files a/images/fiddlerCap.png and /dev/null differ diff --git a/images/fiddler_vs_fiddlercore.png b/images/fiddler_vs_fiddlercore.png deleted file mode 100644 index 68a1af9..0000000 Binary files a/images/fiddler_vs_fiddlercore.png and /dev/null differ diff --git a/images/fiddlerplusproxy.gif b/images/fiddlerplusproxy.gif deleted file mode 100644 index acbae6f..0000000 Binary files a/images/fiddlerplusproxy.gif and /dev/null differ diff --git a/images/fidoptscopyurl.jpg b/images/fidoptscopyurl.jpg deleted file mode 100644 index c1210ec..0000000 Binary files a/images/fidoptscopyurl.jpg and /dev/null differ diff --git a/images/file-white.png b/images/file-white.png deleted file mode 100644 index 7cf9916..0000000 Binary files a/images/file-white.png and /dev/null differ diff --git a/images/file.png b/images/file.png deleted file mode 100644 index bd47649..0000000 Binary files a/images/file.png and /dev/null differ diff --git a/images/folder-close.png b/images/folder-close.png deleted file mode 100644 index d3bea76..0000000 Binary files a/images/folder-close.png and /dev/null differ diff --git a/images/folder-open.png b/images/folder-open.png deleted file mode 100644 index 9b7691f..0000000 Binary files a/images/folder-open.png and /dev/null differ diff --git a/images/getting-started.png b/images/getting-started.png deleted file mode 100644 index 831ceef..0000000 Binary files a/images/getting-started.png and /dev/null differ diff --git a/images/hookconn.png b/images/hookconn.png deleted file mode 100644 index ff3c50d..0000000 Binary files a/images/hookconn.png and /dev/null differ diff --git a/images/howdoi.png b/images/howdoi.png deleted file mode 100644 index e066784..0000000 Binary files a/images/howdoi.png and /dev/null differ diff --git a/images/icon-telerik-badge.png b/images/icon-telerik-badge.png deleted file mode 100644 index 16b1403..0000000 Binary files a/images/icon-telerik-badge.png and /dev/null differ diff --git a/images/ieupstreamproxy.jpg b/images/ieupstreamproxy.jpg deleted file mode 100644 index a96a6dd..0000000 Binary files a/images/ieupstreamproxy.jpg and /dev/null differ diff --git a/images/important.png b/images/important.png deleted file mode 100644 index 2fcadf3..0000000 Binary files a/images/important.png and /dev/null differ diff --git a/images/logo-2x.png b/images/logo-2x.png deleted file mode 100644 index b9a95e0..0000000 Binary files a/images/logo-2x.png and /dev/null differ diff --git a/images/logo.png b/images/logo.png deleted file mode 100644 index 9be4a2d..0000000 Binary files a/images/logo.png and /dev/null differ diff --git a/images/menu.png b/images/menu.png deleted file mode 100644 index 7dfa0da..0000000 Binary files a/images/menu.png and /dev/null differ diff --git a/images/minus.png b/images/minus.png deleted file mode 100644 index 921f244..0000000 Binary files a/images/minus.png and /dev/null differ diff --git a/images/monitorAllConns.png b/images/monitorAllConns.png deleted file mode 100644 index 850f0b6..0000000 Binary files a/images/monitorAllConns.png and /dev/null differ diff --git a/images/nav-arrow.png b/images/nav-arrow.png deleted file mode 100644 index bc95c04..0000000 Binary files a/images/nav-arrow.png and /dev/null differ diff --git a/images/nexus1.png b/images/nexus1.png deleted file mode 100644 index c960037..0000000 Binary files a/images/nexus1.png and /dev/null differ diff --git a/images/nexus2.png b/images/nexus2.png deleted file mode 100644 index 28cc154..0000000 Binary files a/images/nexus2.png and /dev/null differ diff --git a/images/nexus3.png b/images/nexus3.png deleted file mode 100644 index 9ccb70e..0000000 Binary files a/images/nexus3.png and /dev/null differ diff --git a/images/nexus5.png b/images/nexus5.png deleted file mode 100644 index f63ac77..0000000 Binary files a/images/nexus5.png and /dev/null differ diff --git a/images/nexus6.png b/images/nexus6.png deleted file mode 100644 index 81ef914..0000000 Binary files a/images/nexus6.png and /dev/null differ diff --git a/images/nexus7.png b/images/nexus7.png deleted file mode 100644 index 0cdd9ea..0000000 Binary files a/images/nexus7.png and /dev/null differ diff --git a/images/nexus8.png b/images/nexus8.png deleted file mode 100644 index ee85918..0000000 Binary files a/images/nexus8.png and /dev/null differ diff --git a/images/ninja-icon.png b/images/ninja-icon.png deleted file mode 100644 index 7f2c87a..0000000 Binary files a/images/ninja-icon.png and /dev/null differ diff --git a/images/open.png b/images/open.png deleted file mode 100644 index 53d56b6..0000000 Binary files a/images/open.png and /dev/null differ diff --git a/images/plus.png b/images/plus.png deleted file mode 100644 index 097bb1d..0000000 Binary files a/images/plus.png and /dev/null differ diff --git a/images/quickexec.png b/images/quickexec.png deleted file mode 100644 index b253b24..0000000 Binary files a/images/quickexec.png and /dev/null differ diff --git a/images/remdbg.jpg b/images/remdbg.jpg deleted file mode 100644 index 30fc290..0000000 Binary files a/images/remdbg.jpg and /dev/null differ diff --git a/images/search-24.png b/images/search-24.png deleted file mode 100644 index 7ffda8d..0000000 Binary files a/images/search-24.png and /dev/null differ diff --git a/images/search.png b/images/search.png deleted file mode 100644 index e88eb47..0000000 Binary files a/images/search.png and /dev/null differ diff --git a/images/tap-logo.png b/images/tap-logo.png deleted file mode 100644 index 50d893e..0000000 Binary files a/images/tap-logo.png and /dev/null differ diff --git a/images/tutorials.png b/images/tutorials.png deleted file mode 100644 index d37dca3..0000000 Binary files a/images/tutorials.png and /dev/null differ diff --git a/introduction.md b/introduction.md new file mode 100644 index 0000000..ec3da61 --- /dev/null +++ b/introduction.md @@ -0,0 +1,38 @@ +--- +title: Introduction +description: Learn how to install, configure and capture traffic Fiddler Classic. +slug: ConfigureFiddler +publish: true +position: 0 +previous_url: /tasks/configurefiddler +--- + +# Introduction + +Progress® Telerik® Fiddler Classic is a web-debugging tool that monitors, inspects, edits, and logs all HTTPS traffic on Windows. Fiddler Classic is the original product that laid the fondations for the modern-day Fiddler Everywhere application. + +>important Please be aware that Fiddler Classic is not in active development and offers no commitments for releases, patches or tech support. By using this product, you assume all associated risks. We recommend upgrading to [Fiddler Everywhere](https://telerik.com/fiddler/fiddler-everywhere). + +## Get Started with Fiddler Classic + +1. Install Fiddler Classic. You can check more detailed information on how to install Fiddler Classic [here](slug://UsingFiddler). + +2. Configure the Fiddler Classic Server. The **Fiddler Server** is the machine on which Fiddler Classic is installed. Some scenarios may require specific steps for Fiddler Classic to receive and send web traffic. This includes: + + - **Types of traffic**, like [decrypting HTTPS](slug://DecryptHTTPS) and [authenticating with channel-binding tokens](slug://AuthenticateWithCBT) + - **Operating systems**, like [Windows 8, Windows 10, Windows 11](slug://Windows8Config) and [Mac OSX](slug://ConfigureForMac) + - **Network configurations**, like [monitoring a remote machine](slug://MonitorRemoteMachine), [chaining to an upstream proxy](slug://ChainToUpstreamProxy), [using Fiddler Classic as a Reverse Proxy](slug://UseFiddlerAsReverseProxy), [monitoring local traffic](slug://MonitorLocalTraffic) or [monitoring dial-up and VPN connections](slug://MonitorDialupAndVPN) + +3. Configure the Client. The **client** is the source of the web traffic that Fiddler Classic monitors. Some client applications, operating systems, and devices may require specific steps to send and receive traffic to and from Fiddler. This includes: + + - **Browsers**, like [Firefox, Opera, or IE (when sending traffic to localhost)](slug://ConfigureBrowsers) + - **Applications**, like [.NET apps](slug://DotNETConfig), [WinHTTP Apps](slug://ConfigureWinHTTPApp), [Java Apps](slug://ConfigureJavaApp), and [PHP/cURL apps](slug://PHPcURL) + - **Devices**, like [Android](slug://ConfigureForAndroid), [iOS](slug://ConfigureForiOS), [Windows Phone 7](slug://MonitorWindowsPhone7), and [PocketPC](slug://MonitorPocketPC) devices. + +## Additional Resources + +- [Capture traffic with Fiddler Classic](slug://ViewWebTraffic) +- [Capture traffic on macOS, Linux and Windows with **Fiddler Everywhere**](https://telerik.com/fiddler/fiddler-everywhere) +- [Capture and analyze HTTP/2 and TLS1.3 traffic with **Fiddler Everywhere**](https://telerik.com/fiddler/fiddler-everywhere/documentation) +- [Capture and analyze HTTPS traffic alongside MCP with **Fiddler Everywhere**](https://telerik.com/fiddler/fiddler-everywhere/documentation/mcp-server/fiddler-mcp-server) +* [Fiddler Homepage](https://www.telerik.com/fiddler) diff --git a/images/SAZClipboard/ClipboardWindow.png b/knowledge-base/add-ons/images/ClipboardWindow.png similarity index 100% rename from images/SAZClipboard/ClipboardWindow.png rename to knowledge-base/add-ons/images/ClipboardWindow.png diff --git a/images/SAZClipboard/ToolsMenuItem.png b/knowledge-base/add-ons/images/ToolsMenuItem.png similarity index 100% rename from images/SAZClipboard/ToolsMenuItem.png rename to knowledge-base/add-ons/images/ToolsMenuItem.png diff --git a/knowledge-base/add-ons/sazclipboard.md b/knowledge-base/add-ons/sazclipboard.md index e90c417..7535fac 100644 --- a/knowledge-base/add-ons/sazclipboard.md +++ b/knowledge-base/add-ons/sazclipboard.md @@ -5,28 +5,22 @@ slug: SAZClipboard publish: true position: 1 res_type: kb +previous_url: /knowledge-base/scancookies --- -SAZClipboard -============ - -Introduction ------------- +## Introduction The SAZClipboard is a simple extension that allows you to open a .SAZ file outside of the main Fiddler Classic UI. You can then drag sessions between this clipboard from the Fiddler Classic UI. -Why would I want to do this? ----------------------------- +## Why would I want to do this? This may be useful if you're using the Fiddler Classic Request Builder or AutoResponder features, both of which accept drops of Fiddler Classic sessions for reuse. -Download --------- +## Download Install SAZClipboard from here (43 kb). Last update 4/16/2010 -Usage Instructions ------------------- +## Usage Instructions Open the SAZClipboard Window from the **Tools Menu**. @@ -36,5 +30,5 @@ You can drag and drop from the Fiddler Classic session list to the SAZ clipboard ![Clipboard Window][2] -[1]: ../../images/SAZClipboard/ToolsMenuItem.png -[2]: ../../images/SAZClipboard/ClipboardWindow.png \ No newline at end of file +[1]: ./images/ToolsMenuItem.png +[2]: ./images/ClipboardWindow.png \ No newline at end of file diff --git a/knowledge-base/autoresponder.md b/knowledge-base/autoresponder.md index 509bacd..d0c5699 100644 --- a/knowledge-base/autoresponder.md +++ b/knowledge-base/autoresponder.md @@ -6,9 +6,22 @@ position: 9 res_type: kb --- - +## Environment + + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
-# AutoResponder Reference + Fiddler's AutoResponder tab allows you to return files from your local disk instead of transmitting the request to the server. @@ -145,7 +158,7 @@ Delay sending request to the server by #### of milliseconds. Non-final action. Set the Request header with the given Name to the specfied value. If no header of that name exists, a new header will be created. Non-final action. ###*flag:Name=Value -Set the [Session Flag]({%slug SessionFlags%}) with the given Name to the specfied value. If no header of that name exists, a new header will be created. Non-final action. +Set the [Session Flag](slug://SessionFlags) with the given Name to the specfied value. If no header of that name exists, a new header will be created. Non-final action. ### *CORSPreflightAllow Returns a response that indicates that [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) is allowed. diff --git a/knowledge-base/capture-wcf-services-with-localhost-filter.md b/knowledge-base/capture-wcf-services-with-localhost-filter.md index cd7097b..fa5e839 100644 --- a/knowledge-base/capture-wcf-services-with-localhost-filter.md +++ b/knowledge-base/capture-wcf-services-with-localhost-filter.md @@ -16,7 +16,7 @@ res_type: kb Product - Progress® Telerik® Fiddler™ + Progress® Telerik® Fiddler Classic diff --git a/knowledge-base/configure-fiddler-and-upstream-proxy-to-work-on-same-machine.md b/knowledge-base/configure-fiddler-and-upstream-proxy-to-work-on-same-machine.md index 87a597a..91fa688 100644 --- a/knowledge-base/configure-fiddler-and-upstream-proxy-to-work-on-same-machine.md +++ b/knowledge-base/configure-fiddler-and-upstream-proxy-to-work-on-same-machine.md @@ -16,7 +16,7 @@ res_type: kb Product - Progress® Telerik® Fiddler™ + Progress® Telerik® Fiddler Classic @@ -33,24 +33,24 @@ In some cases, when using Fiddler Classic it may be necessary to allow traffic t 2. Use a catch in the PAC file. - ```JavaScript - function FindProxyForURL(url,host){ +```JavaScript +function FindProxyForURL(url,host){ - // Catch specific URL - if (shExpMatch(url,"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")){ - return "PROXY xxxxxxxxxxxxxx"; - } - - // Let other URLs use fiddler - return "PROXY localhost:8888"; + // Catch specific URL + if (shExpMatch(url,"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")){ + return "PROXY xxxxxxxxxxxxxx"; } - ``` + + // Let other URLs use fiddler + return "PROXY localhost:8888"; +} +``` 3. Start Fiddler Classic with -noattach flag. - ```CMD - fiddler.exe -noattach - ``` +```bash +fiddler.exe -noattach +``` 4. Set Fiddler Classic Gateway Options to No Proxy to prevent infinite loop. diff --git a/knowledge-base/download-initiator.md b/knowledge-base/download-initiator.md index af7f822..9b370b3 100644 --- a/knowledge-base/download-initiator.md +++ b/knowledge-base/download-initiator.md @@ -6,14 +6,11 @@ position: 13 res_type: kb --- -Understanding Download-Initiator -================================ - Proxy-based debuggers have a few key strengths -- chief among them is the ability to debug traffic from any application that supports a proxy (which is prettdy much all of them). One downside of debugging at the proxy layer, however, is the loss of context -- it can be very difficult to trace back to determine *why* a given HTTP request was issued. -Having said that, Fiddler Classic includes a number of features to help you understand context. First, Fiddler Classic attempts to map inbound requests back to the process that issued them. For browsers like Internet Explorer 8, with its loosely-coupled process architecture, this often means that each browser tab sends traffic from an individual process. The process information is shown in the Process column in the [Web Sessions List][1], and FiddlerScript and extensions may access the Process Name and instance ID (PID) using the Session object flag named **X-PROCESSINFO**. +Having said that, Fiddler Classic includes a number of features to help you understand context. First, Fiddler Classic attempts to map inbound requests back to the process that issued them. For browsers like Internet Explorer 8, with its loosely-coupled process architecture, this often means that each browser tab sends traffic from an individual process. The process information is shown in the Process column in the [Web Sessions List](slug://ViewSessionSummary), and FiddlerScript and extensions may access the Process Name and instance ID (PID) using the Session object flag named **X-PROCESSINFO**. -Fiddler Classic also uses the HTTP **Referer** header to help you [associate traffic][2]. Fiddler Classic assumes that the parent session is the session is the most recent request to the URL specified in the selected session's Referer header. "Child requests" are those requests after the current request that have a Referer of the currently selected session's URL. +Fiddler Classic also uses the HTTP **Referer** header to help you [associate traffic](slug://ParentChild). Fiddler Classic assumes that the parent session is the session is the most recent request to the URL specified in the selected session's Referer header. "Child requests" are those requests after the current request that have a Referer of the currently selected session's URL. Internet Explorer 9 includes two new features that help add more context. @@ -22,62 +19,67 @@ First, the Web Browser now sends a meaningful Accept header for most types of do + **Frame/markup** - text/html, application/xhtml+xml, */* +```txt +text/html, application/xhtml+xml, */* +``` + **CSS** - text/css +```txt +text/css +``` + **Script** - application/javascript, */*;q=0.8 +```txt +application/javascript, */*;q=0.8 +``` + **Image** - image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5 +```txt +image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5 +``` + **Generic context** - */* +```txt +*/* +``` -For compatibility with legacy sites, the legacy **Accept** headers are sent when a site is configured to run in [Compatibility View][3]. +For compatibility with legacy sites, the legacy **Accept** headers are sent when a site is configured to run in [Compatibility View](https://blogs.msdn.com/b/patricka/archive/2010/09/16/if-i-m-using-internet-explorer-9-beta-what-should-i-do-if-a-site-is-broken-or-hangs-or-crashes-etc.aspx). -Within Fiddler, you can display the Accept header in the Session list as a column. To do so just for the current session, enter the following command in the [QuickExec box][4]: +Within Fiddler, you can display the Accept header in the Session list as a column. To do so just for the current session, enter the following command in the [QuickExec box](slug://QuickExec): - cols add @request.Accept +```txt +cols add @request.Accept +``` This will add a column labelled **@request.Accept** and as each session is logged, the request's Accept header, if any, will be listed. To add this column every time Fiddler Classic starts, click Rules > Customize Rules. Scroll to the static function Main() block , and add the following line within: - FiddlerObject.UI.lvSessions.AddBoundColumn("Accept", 50, "@request.Accept"); +```c# +FiddlerObject.UI.lvSessions.AddBoundColumn("Accept", 50, "@request.Accept"); +``` Second, while understanding what class of Element initiated a request is useful, IE9 includes an even more valuable feature that conveys contextual information about why a request was made. You can see this feature at work in the Internet Explorer F12 Developer Tools, which you can open by pressing (you guessed it) the F12 key. On the Network tab, you'll see the **Initiator** column that provides more information about the context in which a request was made: - This information, by default, is not sent to the network, but you may set a Feature Control Key to emit the information as a custom HTTP request header that Fiddler Classic will see. Most Feature Control Keys, including this one, are simple flags stored in the registry that change the behavior of the Web Browser when set. -+ [Enable FEATURE_DOWNLOAD_INITIATOR_HTTP_HEADER][7] -+ [Disable FEATURE_DOWNLOAD_INITIATOR_HTTP_HEADER][8] - You can display this information in Fiddler Classic using the same technique described previously: - cols add @request.X-Download-Initiator +```txt +cols add @request.X-Download-Initiator +``` This will add a column labelled **@request.Accept** and as each session is logged, the request's Accept header, if any, will be listed. To add this column every time Fiddler Classic starts, click Rules > Customize Rules. Scroll to the static function Main() block , and add the following line within: - FiddlerObject.UI.lvSessions.AddBoundColumn("Reason", 50, "@request.X-Download-Initiator"); +```c# +FiddlerObject.UI.lvSessions.AddBoundColumn("Reason", 50, "@request.X-Download-Initiator"); +``` Then, when you load a page, you will see the initiator information: -![Reason Column][5] - -Interpretation of these tokens is as follows. First, there's a token (e.g. image, script, html) indicating what type of content is being downloaded. Next, an indicator of which document object "owns" the download. Information about what element made the request is present, and in some cases, information about what the exact download trigger was. For instance "html tokenizer" means that the download request occurred during the parsing of HTML. "html lookahead" indicates that the [Lookahead parser] is making the request. On the other hand, "src property change" means that the download occurred because script changed the SRC property of an **img** tag. +![Reason Column](./images/Download-Initiator.png) -[1]: ../Observe-Traffic/Tasks/ViewSessionSummary -[2]: ../Observe-Traffic/Tasks/ParentChild -[3]: https://blogs.msdn.com/b/patricka/archive/2010/09/16/if-i-m-using-internet-explorer-9-beta-what-should-i-do-if-a-site-is-broken-or-hangs-or-crashes-etc.aspx -[4]: ./QuickExec -[5]: ../images/Download-Initiator/Download-Initiator.png -[6]: https://blogs.msdn.com/b/ieinternals/archive/2010/04/01/ie8-lookahead-downloader-fixed.aspx -[7]: https://www.fiddler2.com/dl/EnableDownloadInitiator.reg -[8]: http://www.fiddlerbook.com/dl/DisableDownloadInitiator.reg +Interpretation of these tokens is as follows. First, there's a token (e.g. image, script, html) indicating what type of content is being downloaded. Next, an indicator of which document object "owns" the download. Information about what element made the request is present, and in some cases, information about what the exact download trigger was. For instance "html tokenizer" means that the download request occurred during the parsing of HTML. "html lookahead" indicates that the [Lookahead parser] is making the request. On the other hand, "src property change" means that the download occurred because script changed the SRC property of an **img** tag. \ No newline at end of file diff --git a/knowledge-base/execaction.md b/knowledge-base/execaction.md index 661a2fc..2cb21fd 100644 --- a/knowledge-base/execaction.md +++ b/knowledge-base/execaction.md @@ -7,8 +7,23 @@ position: 10 res_type: kb --- -Controlling Fiddler Classic with Test Automation -======================================== + +## Environment + + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
+ +## Controlling Fiddler Classic with Test Automation ExecAction.exe is a command line executable which is suitable for calling from batch files or unit tests. It passes its command line into FiddlerScript's **OnExecAction** function for processing, just like Fiddler's [QuickExec box][1]. The ExecAction commands can be handled by FiddlerScript or FiddlerExtensions. diff --git a/knowledge-base/fiddlerarchitecture.md b/knowledge-base/fiddlerarchitecture.md index 31eb6e2..9510282 100644 --- a/knowledge-base/fiddlerarchitecture.md +++ b/knowledge-base/fiddlerarchitecture.md @@ -6,75 +6,92 @@ res_type: kb position: 12 --- - - -# Fiddler Classic Architecture Info +## Environment + + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
+ +## Fiddler Classic Architecture Info This page contains information about Fiddler's internal architecture which may be of interest for advanced users of Fiddler. Note that all information presented here is subject to change; expect that you will need to maintain your code if you use the functionality on this page. ## Session State The Session.state property exposes information about the current request - public enum SessionStates - { - Created, // Object created but nothing's happening yet - ReadingRequest, // Thread is reading the HTTP Request - AutoTamperRequestBefore, // AutoTamperRequest pass 1 (Only used by IAutoTamper) - HandTamperRequest, // User can tamper using Fiddler Classic Inspectors - AutoTamperRequestAfter, // AutoTamperRequest pass 2 (Only used by IAutoTamper) - SendingRequest, // Thread is sending the Request to the server - ReadingResponse, // Thread is reading the HTTP Response - AutoTamperResponseBefore, // AutoTamperResponse pass 1 (Only used by IAutoTamper) - HandTamperResponse, // User can tamper using Fiddler Classic Inspectors - AutoTamperResponseAfter, // AutoTamperResponse pass 2 (Only used by IAutoTamper) - SendingResponse, // Sending response to client application - Done, // Session is for archival purposes only - Aborted // Session was aborted (client didn't want response, fatal error, etc) - }; +```c# +public enum SessionStates +{ + Created, // Object created but nothing's happening yet + ReadingRequest, // Thread is reading the HTTP Request + AutoTamperRequestBefore, // AutoTamperRequest pass 1 (Only used by IAutoTamper) + HandTamperRequest, // User can tamper using Fiddler Classic Inspectors + AutoTamperRequestAfter, // AutoTamperRequest pass 2 (Only used by IAutoTamper) + SendingRequest, // Thread is sending the Request to the server + ReadingResponse, // Thread is reading the HTTP Response + AutoTamperResponseBefore, // AutoTamperResponse pass 1 (Only used by IAutoTamper) + HandTamperResponse, // User can tamper using Fiddler Classic Inspectors + AutoTamperResponseAfter, // AutoTamperResponse pass 2 (Only used by IAutoTamper) + SendingResponse, // Sending response to client application + Done, // Session is for archival purposes only + Aborted // Session was aborted (client didn't want response, fatal error, etc) +}; +``` ## FiddlerApplication The static **FiddlerApplication** object collects interesting objects and event handlers useful for building extensions. - public delegate void SimpleEventHandler(); - public delegate void CalculateReportHandler(Session[] _arrSessions); +```c# +public delegate void SimpleEventHandler(); +public delegate void CalculateReportHandler(Session[] _arrSessions); - public class FiddlerApplication - { - [CodeDescription("Fiddler's main form.")] - public static frmViewer UI; +public class FiddlerApplication +{ + [CodeDescription("Fiddler's main form.")] + public static frmViewer UI; - public static Proxy oProxy; - public static AutoResponder oAutoResponder; - public static FiddlerExtensions oExtensions; - public static FiddlerScript scriptRules; + public static Proxy oProxy; + public static AutoResponder oAutoResponder; + public static FiddlerExtensions oExtensions; + public static FiddlerScript scriptRules; - [CodeDescription("Fiddler's core proxy engine.")] - public static Proxy oProxy; + [CodeDescription("Fiddler's core proxy engine.")] + public static Proxy oProxy; - [CodeDescription("Fiddler's AutoResponder object.")] REMOVED in v2.1.8 - public static AutoResponder oAutoResponder; + [CodeDescription("Fiddler's AutoResponder object.")] REMOVED in v2.1.8 + public static AutoResponder oAutoResponder; - [CodeDescription("Fiddler's loaded extensions.")] - public static FiddlerExtensions oExtensions; + [CodeDescription("Fiddler's loaded extensions.")] + public static FiddlerExtensions oExtensions; - [CodeDescription("FiddlerScript scripting engine.")] Likely to be removed - public static FiddlerScript scriptRules; + [CodeDescription("FiddlerScript scripting engine.")] Likely to be removed + public static FiddlerScript scriptRules; - [CodeDescription("Sync this event to be notified when Fiddler Classic has completed startup.")] - public static event SimpleEventHandler FiddlerBoot; + [CodeDescription("Sync this event to be notified when Fiddler Classic has completed startup.")] + public static event SimpleEventHandler FiddlerBoot; - [CodeDescription("Sync this event to be notified when Fiddler Classic has attached as the system proxy.")] - public static event SimpleEventHandler FiddlerAttach; + [CodeDescription("Sync this event to be notified when Fiddler Classic has attached as the system proxy.")] + public static event SimpleEventHandler FiddlerAttach; - [CodeDescription("Sync this event to be notified when Fiddler Classic has detached as the system proxy.")] - public static event SimpleEventHandler FiddlerDetach; + [CodeDescription("Sync this event to be notified when Fiddler Classic has detached as the system proxy.")] + public static event SimpleEventHandler FiddlerDetach; - [CodeDescription("Sync this event to be notified when Fiddler Classic shuts down.")] - public static event SimpleEventHandler FiddlerShutdown; + [CodeDescription("Sync this event to be notified when Fiddler Classic shuts down.")] + public static event SimpleEventHandler FiddlerShutdown; - [CodeDescription("Sync this event to capture the CalculateReport event, summarizing the selected sessions.")] - public static event CalculateReportHandler CalculateReport; - } + [CodeDescription("Sync this event to capture the CalculateReport event, summarizing the selected sessions.")] + public static event CalculateReportHandler CalculateReport; +} +``` ## Fiddler SessionFlags Each Session object in Fiddler Classic contains a collection of string flags, in the Session.oFlags[] collection. The flags control how the session is processed and displayed in Session List. See [Fiddler Classic Session Flags](http://fiddler2.com/Fiddler/dev/SessionFlags.asp) for more information. @@ -97,4 +114,4 @@ Note that this may be different than if Fiddler Classic were not intercepting th Learn more about [HTTPS Decryption](../Configure-Fiddler/Tasks/DecryptHTTPS). ## Silent Installation -Want a silent / unattended install? Use the setup command line: **FiddlerSetup.exe /S** +Want a silent / unattended install? Use the setup command line: `FiddlerSetup.exe /S` diff --git a/knowledge-base/fiddlerhook.md b/knowledge-base/fiddlerhook.md index e1cc9be..9a6f3fe 100644 --- a/knowledge-base/fiddlerhook.md +++ b/knowledge-base/fiddlerhook.md @@ -6,42 +6,52 @@ position: 6 res_type: kb --- - +## Environment -Configure Firefox with FiddlerHook -================================== + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
+ + +## Configure Firefox with FiddlerHook The **FiddlerHook** Firefox add-on points Firefox at Fiddler, avoiding the need for manual configuration or restarting Firefox. -Enable FiddlerHook ------------------- +## Enable FiddlerHook In most cases, the **FiddlerHook** Firefox add-on should be enabled by default. If not, enable it manually: 1. In Firefox, click **Tools > Add-ons > Extensions**. 2. Next to **FiddlerHook**, click **Enable**. - ![Enable FiddlerHook][1] + ![Enable FiddlerHook](./images/Enable.png) Click **Monitor with Fiddler** on Firefox's **Tools** menu (or in the status bar). Choose an option to control how Firefox should use Fiddler. -![FiddlerHookOptions](../images/FiddlerHookOptions.png) +![FiddlerHookOptions](./images/FiddlerHookOptions.png) The option "Force Traffic to Fiddler" will attempt to send traffic to Fiddler Classic regardless of whether or not it's even running. The Use Fiddler Classic Automatically option will emulate IE's behavior: traffic will be sent to Fiddler Classic only when Fiddler Classic is running and is in "capturing" mode. To add the **Launch Fiddler** button to your toolbar, right-click the Firefox toolbar and choose **Customize.** -![fiddlerhook-step1](../images/fiddlerhook-step1.png) +![fiddlerhook-step1](./images/fiddlerhook-step1.png) In the dialog that appears, drag the Fiddler Classic icon to the toolbar location of your choice. -![fiddlerhook2](../images/fiddlerhook2.png) +![fiddlerhook2](./images/fiddlerhook2.png) FiddlerHook also introduces a simple way to clear your Firefox cache (memory and disk) and all cookies (persistent and session). Simply click on the FiddlerHook status bar item and use the menu: -![FiddlerHookMenu](../images/fhmenu.png) +![FiddlerHookMenu](./images/fhmenu.png) Removal Instructions -You can use Firefox's Add-on Manager (on the tools menu) to disable the FiddlerHook addon. If you would like to remove the FiddlerHook add-on altogether, you can simply delete the %localappdata%\Programs\Fiddler\FiddlerHook folder. - -[1]: ../images/FiddlerHook/Enable.png +You can use Firefox's Add-on Manager (on the tools menu) to disable the FiddlerHook addon. If you would like to remove the FiddlerHook add-on altogether, you can simply delete the `%localappdata%\Programs\Fiddler\FiddlerHook` folder. \ No newline at end of file diff --git a/knowledge-base/fiddlerscript/addcolumns.md b/knowledge-base/fiddlerscript/addcolumns.md index 40c214a..8156a7e 100644 --- a/knowledge-base/fiddlerscript/addcolumns.md +++ b/knowledge-base/fiddlerscript/addcolumns.md @@ -7,63 +7,60 @@ res_type: kb position: 7 --- -Add Columns to the Web Sessions List -==================================== +To add custom columns to the **Web Sessions List**, [add rules](slug://AddRules) using FiddlerScript. -To add custom columns to the **Web Sessions List**, [add rules][1] using FiddlerScript. - -The BindUIColumn Attribute --------------------------- +## The BindUIColumn Attribute To fill a custom column, add a method labeled with the **BindUIColumn** attribute. Fiddler Classic will run the method on each session to fill the custom column. (To avoid exceptions, be sure that your method is robust and checks to ensure that objects exist before use!) For example: - - **Fill custom column with session HTTP Method** - public static BindUIColumn("HTTPMethod") - function CalcMethodCol(oS: Session){ - if (null != oS.oRequest) return oS.oRequest.headers.HTTPMethod; else return String.Empty; - } +```c# +public static BindUIColumn("HTTPMethod") +function CalcMethodCol(oS: Session){ + if (null != oS.oRequest) return oS.oRequest.headers.HTTPMethod; else return String.Empty; +} +``` **Fill custom column with time taken for session** - 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; - } - - +```c# +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; +} +``` There are four overloads for BindUIColumn that allow you to set the width, display order, and whether the column should be sorted numerically. - BindUIColumn(string colName) +```c# +BindUIColumn(string colName) - BindUIColumn(string colName, bool bSortColumnNumerically) +BindUIColumn(string colName, bool bSortColumnNumerically) - public BindUIColumn(string colName, int iColWidth) +public BindUIColumn(string colName, int iColWidth) - public BindUIColumn(string colName, int iColWidth, int iDisplayOrder) +public BindUIColumn(string colName, int iColWidth, int iDisplayOrder) +``` -The AddBoundColumn method -------------------------- +## The AddBoundColumn method Alternatively, you can call the **AddBoundColumn()** method. The first parameter is the name with which the column should be named, and the second parameter is the default width of the column. The third parameter is either a Fiddler Classic Session Flag string, an @-prefixed-header name, or a JavaScript function that returns a string. - static function Main() - { - FiddlerObject.UI.lvSessions.AddBoundColumn("ClientPort", 50, "X-ClientPort"); - FiddlerObject.UI.lvSessions.AddBoundColumn("SentCookie1", 60, getSentCookie); - FiddlerObject.UI.lvSessions.AddBoundColumn("SentCookie2", 60, "@request.Cookie"); - FiddlerObject.UI.lvSessions.AddBoundColumn("ReturnedCookie", 60, "@response.Set-Cookie"); - } - - static function getSentCookie(oS: Session){ if (null != oS.oRequest) return oS.oRequest["Cookie"]; } - -[1]: ../../Extend-Fiddler/AddRules +```c# +static function Main() +{ + FiddlerObject.UI.lvSessions.AddBoundColumn("ClientPort", 50, "X-ClientPort"); + FiddlerObject.UI.lvSessions.AddBoundColumn("SentCookie1", 60, getSentCookie); + FiddlerObject.UI.lvSessions.AddBoundColumn("SentCookie2", 60, "@request.Cookie"); + FiddlerObject.UI.lvSessions.AddBoundColumn("ReturnedCookie", 60, "@response.Set-Cookie"); +} + +static function getSentCookie(oS: Session){ if (null != oS.oRequest) return oS.oRequest["Cookie"]; } +``` \ No newline at end of file diff --git a/knowledge-base/fiddlerscript/customizemenus.md b/knowledge-base/fiddlerscript/customizemenus.md index a846699..36afe32 100644 --- a/knowledge-base/fiddlerscript/customizemenus.md +++ b/knowledge-base/fiddlerscript/customizemenus.md @@ -6,86 +6,83 @@ position: 3 res_type: kb --- -Customize Menus -=============== - -To customize menus in Fiddler, [add rules][1] using FiddlerScript with Global scope. For example: - +To customize menus in Fiddler, [add rules](slug://AddRules) using FiddlerScript with Global scope. For example: **Add context-menu item to open currently selected URLs using Firefox** - public static ContextAction("Open in Firefox") - function DoOpenInIE(oSessions: Fiddler.Session[]){ - if (null == oSessions){ - MessageBox.Show("Please choose at least 1 session."); return; - } - - for (var x = 0; x < oSessions.Length; x++){ - System.Diagnostics.Process.Start("firefox.exe", oSessions[x].url); - } - } +```c# +public static ContextAction("Open in Firefox") +function DoOpenInIE(oSessions: Fiddler.Session[]){ + if (null == oSessions){ + MessageBox.Show("Please choose at least 1 session."); return; + } + for (var x = 0; x < oSessions.Length; x++){ + System.Diagnostics.Process.Start("firefox.exe", oSessions[x].url); + } +} +``` **Add a submenu to the Rules menu and create an option in it** - public static RulesOption("Non-Exclusive-Test", "User-Agent") - var m_UANONRad: boolean = true; - - +```c# +public static RulesOption("Non-Exclusive-Test", "User-Agent") +var m_UANONRad: boolean = true; +``` **To build submenus with mutually exclusive radio options** - public static RulesOption("Spoof Netscape &3.0", "User-Agent", true) - var m_NS3: boolean = false; - - public static RulesOption("Spoof IE &6.0", "User-Agent", true) - var m_IE6: boolean = false; - - public static RulesOption("Spoof nothing", "User-Agent", true) - var m_UANONE: boolean = true; +```c# +public static RulesOption("Spoof Netscape &3.0", "User-Agent", true) +var m_NS3: boolean = false; +public static RulesOption("Spoof IE &6.0", "User-Agent", true) +var m_IE6: boolean = false; +public static RulesOption("Spoof nothing", "User-Agent", true) +var m_UANONE: boolean = true; +``` **To build a submenu with mutually exclusive radio options, that control a single string variable** (Offers a more compact syntax than the previous alternative) - RulesString("&SubMenuName", true) - RulesStringValue(0,"Option1Name", "Option1Value") - RulesStringValue(1,"Option2Name", "Option2Value") - RulesStringValue(2,"&Custom...", "%CUSTOM%") - public static var sTheOptionValue: String = null; - - +```c# +RulesString("&SubMenuName", true) +RulesStringValue(0,"Option1Name", "Option1Value") +RulesStringValue(1,"Option2Name", "Option2Value") +RulesStringValue(2,"&Custom...", "%CUSTOM%") +public static var sTheOptionValue: String = null; +``` **Same as previous, but with a default option pre-selected** - RulesString("&SubMenuName", true) - RulesStringValue(0,"Option1Name", "Option1Value") - RulesStringValue(1,"Option2NameDEFAULT", "DefaultVal", true) - RulesStringValue(2,"&Custom...", "%CUSTOM%") - public static var sTheOptionValue: String = null; - - +```c# +RulesString("&SubMenuName", true) +RulesStringValue(0,"Option1Name", "Option1Value") +RulesStringValue(1,"Option2NameDEFAULT", "DefaultVal", true) +RulesStringValue(2,"&Custom...", "%CUSTOM%") +public static var sTheOptionValue: String = null; +``` **Add a Tools menu option that resets the script** - // Force a manual reload of the script file. Resets all - // RulesOption variables to their defaults. - public static ToolsAction("Reset Script") - function DoManualReload(){ - FiddlerObject.ReloadScript(); - } - +```c# +// Force a manual reload of the script file. Resets all +// RulesOption variables to their defaults. +public static ToolsAction("Reset Script") +function DoManualReload(){ + FiddlerObject.ReloadScript(); +} +``` **Add a Tools menu option that clears all WinINET/IE cookies and cache files** - public static ToolsAction("Reset IE"){ - FiddlerObject.UI.actClearWinINETCache(); - FiddlerObject.UI.actClearWinINETCookies(); - } - - -[1]: ../../Extend-Fiddler/AddRules \ No newline at end of file +```c# +public static ToolsAction("Reset IE"){ + FiddlerObject.UI.actClearWinINETCache(); + FiddlerObject.UI.actClearWinINETCookies(); +} +``` \ No newline at end of file diff --git a/knowledge-base/fiddlerscript/customizesessionslist.md b/knowledge-base/fiddlerscript/customizesessionslist.md index 6288f8e..d9f0bd6 100644 --- a/knowledge-base/fiddlerscript/customizesessionslist.md +++ b/knowledge-base/fiddlerscript/customizesessionslist.md @@ -6,133 +6,126 @@ position: 4 res_type: kb --- -Customize Web Sessions List -=========================== - -To customize Fiddler's **Web Sessions List**, [add rules][1] using FiddlerScript to the **OnBeforeRequest** function (except where noted). For example: +To customize Fiddler's **Web Sessions List**, [add rules](slug://AddRules) using FiddlerScript to the **OnBeforeRequest** function (except where noted). For example: **Display in the "Custom Column" the time of the original request** - oSession["ui-customcolumn"] += DateTime.Now.ToString("h:mm:ss.ffff "); - - +```c# +oSession["ui-customcolumn"] += DateTime.Now.ToString("h:mm:ss.ffff "); +``` **Show any Set-Cookie headers in Custom column in Session list.** (in **OnBeforeResponse**) - oSession["ui-customcolumn"] = oSession.oResponse["Set-Cookie"]; - - +```c# +oSession["ui-customcolumn"] = oSession.oResponse["Set-Cookie"]; +``` **Mark any requests which send cookies in red, and show the value in the Custom column. Otherwise, mark request in green.** - if (oSession.oRequest.headers.Exists("Cookie")) - { - oSession["ui-color"]="red"; - oSession["ui-customcolumn"] = oSession.oRequest["Cookie"]; - } - else - oSession["ui-color"]="green"; - - +```c# +if (oSession.oRequest.headers.Exists("Cookie")) +{ +oSession["ui-color"]="red"; +oSession["ui-customcolumn"] = oSession.oRequest["Cookie"]; +} +else +oSession["ui-color"]="green"; +``` **Hide requests for .GIFs from the session list** - if (oSession.url.EndsWith(".gif")){ - oSession["ui-hide"]="hiding image requests"; //String value not important - } - - - -**Hide completed responses which returned images** -(in **OnBeforeResponse**) - - if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "image/")) { - oSession["ui-hide"] = "hiding images"; // String value not important - } +```c# +if (oSession.url.EndsWith(".gif")){ + oSession["ui-hide"]="hiding image requests"; //String value not important +} +``` +**Hide completed responses which returned images** (in `OnBeforeResponse`) +```c# +if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "image/")) { + oSession["ui-hide"] = "hiding images"; // String value not important +} +``` **Hide requests to domains except those I care about** - if (!oSession.HostnameIs("domainIcareabout.com")){ - oSession["ui-hide"] = "hiding boring domains"; // String value not important - } +```c# +if (!oSession.HostnameIs("domainIcareabout.com")){ + oSession["ui-hide"] = "hiding boring domains"; // String value not important +} +``` +**Unhide any response which returned a 404** (in `OnBeforeResponse`) +```c# +if (oSession.responseCode == 404){ + oSession.oFlags.Remove("ui-hide"); +} +``` -**Unhide any response which returned a 404** -(in **OnBeforeResponse**) - - if (oSession.responseCode == 404){ - oSession.oFlags.Remove("ui-hide"); - } - +**Flag all pages in which the server sends a cookie** (in `OnBeforeResponse`) - -**Flag all pages in which the server sends a cookie** -(in **OnBeforeResponse**) - - if (oSession.oResponse.headers.Exists("Set-Cookie") { - oSession.utilDecodeResponse(); - if (oSession.utilFindInResponse("document.cookie", false)>-1 || - oSession.utilFindInResponse('HTTP-EQUIV="Set-Cookie"', false)>-1) { - oSession["ui-color"]="purple"; - } +```c# +if (oSession.oResponse.headers.Exists("Set-Cookie") { + oSession.utilDecodeResponse(); + if (oSession.utilFindInResponse("document.cookie", false)>-1 || + oSession.utilFindInResponse('HTTP-EQUIV="Set-Cookie"', false)>-1) { + oSession["ui-color"]="purple"; +} +``` +**Show redirection target Location in Session List** (In `OnBeforeResponse`) -**Show redirection target Location in Session List** -(In **OnBeforeResponse**) +```c# +if ((oSession.responseCode > 299) && (oSession.responseCode < 308)){ + oSession["ui-customcolumn"] = oSession.oResponse["Location"]; +} +``` - if ((oSession.responseCode > 299) && (oSession.responseCode < 308)){ - oSession["ui-customcolumn"] = oSession.oResponse["Location"]; - } - - - -**Add image size information in a column.** -(**Global** scope) +**Add image size information in a column.** (**Global** scope) Note: you must add System.drawing.dll inside **Tools > Options > Extensions > References**. - public static BindUIColumn("ImageSize", 60) - function FillImageSizeColumn(oS: Session){ - if ((oS.oResponse != null) && (oS.oResponse.headers != null)) - { - try{ - if (!oS.oResponse.headers.ExistsAndContains("Content-Type", "image/")) return "NotAnImage"; - - var oMS: System.IO.MemoryStream = new System.IO.MemoryStream(oS.responseBodyBytes); - var i:System.Drawing.Bitmap = new System.Drawing.Bitmap(oMS); - return (i.Width + " x " + i.Height); - } - catch(e) { return "err"; } - } - return String.Empty; +```c# +public static BindUIColumn("ImageSize", 60) +function FillImageSizeColumn(oS: Session){ + if ((oS.oResponse != null) && (oS.oResponse.headers != null)) + { + try{ + if (!oS.oResponse.headers.ExistsAndContains("Content-Type", "image/")) return "NotAnImage"; + + var oMS: System.IO.MemoryStream = new System.IO.MemoryStream(oS.responseBodyBytes); + var i:System.Drawing.Bitmap = new System.Drawing.Bitmap(oMS); + return (i.Width + " x " + i.Height); } + catch(e) { return "err"; } + } + return String.Empty; +} +``` +**Search all text responses for a list of strings and flag sessions** (in `OnBeforeRequest`) -**Search all text responses for a list of strings and flag sessions** -(in **OnBeforeRequest**) +```c# +oSession.utilDecodeResponse(); - oSession.utilDecodeResponse(); +// Create a array of strings we're looking for. +var oFindStrings = new Array( "XMLHttp", "onreadystatechange", "readyState", "responseBody", "responseText", "responseXML", "statusText", "abort", "getAllResponseHeaders", "getResponseHeader", "setRequestHeader"); - // Create a array of strings we're looking for. - var oFindStrings = new Array( "XMLHttp", "onreadystatechange", "readyState", "responseBody", "responseText", "responseXML", "statusText", "abort", "getAllResponseHeaders", "getResponseHeader", "setRequestHeader"); +// For each target string, check the response to see if it's present. +var iEach=0; - // For each target string, check the response to see if it's present. - var iEach=0; - - oSession["ui-customcolumn"]=String.Empty; - - for (iEach; iEach0) { - oSession["ui-color"]="purple"; - oSession["ui-customcolumn"] += oFindStrings[iEach]+"; "; - } - } +oSession["ui-customcolumn"]=String.Empty; -[1]: ../../Extend-Fiddler/AddRules \ No newline at end of file +for (iEach; iEach0) { + oSession["ui-color"]="purple"; + oSession["ui-customcolumn"] += oFindStrings[iEach]+"; "; + } +} +``` \ No newline at end of file diff --git a/knowledge-base/fiddlerscript/fiddlerprefs.md b/knowledge-base/fiddlerscript/fiddlerprefs.md index 7b5c972..93a995b 100644 --- a/knowledge-base/fiddlerscript/fiddlerprefs.md +++ b/knowledge-base/fiddlerscript/fiddlerprefs.md @@ -7,9 +7,6 @@ position: 8 res_type: kb --- -The Fiddler Classic Preferences System -============================== - To learn how to simply the storage and reloading of user-preferences, read [this article][1]. -[1]: https://blogs.msdn.com/b/fiddler/archive/2010/05/04/fiddler-preference-system.aspx +[1]: http://fiddler.wikidot.com/preflist diff --git a/knowledge-base/fiddlerscript/modifyrequestorresponse.md b/knowledge-base/fiddlerscript/modifyrequestorresponse.md index bbb5ec5..892cdef 100644 --- a/knowledge-base/fiddlerscript/modifyrequestorresponse.md +++ b/knowledge-base/fiddlerscript/modifyrequestorresponse.md @@ -6,10 +6,8 @@ position: 1 res_type: kb --- -Modifying a Request or Response -=============================== -To make custom changes to web requests and responses, use FiddlerScript to [add rules]({%slug AddRules%}) to Fiddler's **OnBeforeRequest** or **OnBeforeResponse** function. Which function is appropriate depends on the objects your code uses: **OnBeforeRequest** is called before each request, and **OnBeforeResponse** is called before each response. Note: +To make custom changes to web requests and responses, use FiddlerScript to [add rules](slug://AddRules) to Fiddler's **OnBeforeRequest** or **OnBeforeResponse** function. Which function is appropriate depends on the objects your code uses: **OnBeforeRequest** is called before each request, and **OnBeforeResponse** is called before each response. Note: + It *is not possible* to access the response objects inside **OnBeforeRequest** as they have not yet been created. + It *is possible* to use objects from the request inside **OnBeforeResponse**; however, any changes you make to those objects will not be seen by the server, as it has already received the request. @@ -17,162 +15,164 @@ To make custom changes to web requests and responses, use FiddlerScript to [add **Add a request header** - oSession.oRequest["NewHeaderName"] = "New header value"; - - +```c# +oSession.oRequest["NewHeaderName"] = "New header value"; +``` **Delete a response header** - oSession.oResponse.headers.Remove("Set-Cookie"); - - +```c# +oSession.oResponse.headers.Remove("Set-Cookie"); +``` **Change a request for one page to a different page on the same server** - if (oSession.PathAndQuery=="/version1.css") { - oSession.PathAndQuery="/version2.css"; - } - - +```c# +if (oSession.PathAndQuery=="/version1.css") { + oSession.PathAndQuery="/version2.css"; +} +``` **Point all requests for one server to the same port on a different server** - if (oSession.HostnameIs("www.bayden.com")) { - oSession.hostname="test.bayden.com"; - } - - +```c# +if (oSession.HostnameIs("www.bayden.com")) { + oSession.hostname="test.bayden.com"; +} +``` **Point all requests for one port to a different port on a different server** - if (oSession.host=="www.bayden.com:8080") { - oSession.host="test.bayden.com:9090"; - } - - +```c# +if (oSession.host=="www.bayden.com:8080") { + oSession.host="test.bayden.com:9090"; +} +``` **Point all requests for one server to a different server, including HTTPS tunnels** - // Redirect traffic, including HTTPS tunnels - if (oSession.HTTPMethodIs("CONNECT") && (oSession.PathAndQuery == "www.example.com:443")) { - oSession.PathAndQuery = "beta.example.com:443"; - } - - if (oSession.HostnameIs("www.example.com")) oSession.hostname = "beta.example.com"; - +```c# +// Redirect traffic, including HTTPS tunnels +if (oSession.HTTPMethodIs("CONNECT") && (oSession.PathAndQuery == "www.example.com:443")) { + oSession.PathAndQuery = "beta.example.com:443"; +} +if (oSession.HostnameIs("www.example.com")) oSession.hostname = "beta.example.com"; +``` **Simulate the Windows HOSTS file, by pointing one Hostname to a different IP address.** (Retargets without changing the request's Host header) - // All requests for subdomain.example.com should be directed to the development server at 128.123.133.123 - if (oSession.HostnameIs("subdomain.example.com")){ - oSession.bypassGateway = true; // Prevent this request from going through an upstream proxy - oSession["x-overrideHost"] = "128.123.133.123"; // DNS name or IP address of target server - } - - +```c# +// All requests for subdomain.example.com should be directed to the development server at 128.123.133.123 +if (oSession.HostnameIs("subdomain.example.com")){ +oSession.bypassGateway = true; // Prevent this request from going through an upstream proxy +oSession["x-overrideHost"] = "128.123.133.123"; // DNS name or IP address of target server +} +``` **Retarget requests for a single page to a different page, potentially on a different server.** (Retargets by changing the request's Host header) - if (oSession.url=="www.example.com/live.js") { - oSession.url = "dev.example.com/workinprogress.js"; - } - - +```c# +if (oSession.url=="www.example.com/live.js") { + oSession.url = "dev.example.com/workinprogress.js"; +} +``` **Prevent upload of HTTP Cookies** - oSession.oRequest.headers.Remove("Cookie"); - - +```c# +oSession.oRequest.headers.Remove("Cookie"); +``` **Decompress and unchunk a HTTP response, updating headers if needed** - // Remove any compression or chunking from the response in order to make it easier to manipulate - oSession.utilDecodeResponse(); - - +```c# +// Remove any compression or chunking from the response in order to make it easier to manipulate +oSession.utilDecodeResponse(); +``` **Search and replace in HTML.** - if (oSession.HostnameIs("www.bayden.com") && oSession.oResponse.headers.ExistsAndContains("Content-Type","text/html")){ - oSession.utilDecodeResponse(); - oSession.utilReplaceInResponse('',''); - } - - +```c# +if (oSession.HostnameIs("www.bayden.com") && oSession.oResponse.headers.ExistsAndContains("Content-Type","text/html")){ + oSession.utilDecodeResponse(); + oSession.utilReplaceInResponse('',''); +} +``` **Case insensitive Search of response HTML.** - if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "text/html") && oSession.utilFindInResponse("searchfor", false)>-1){ - oSession["ui-color"] = "red"; - } - - +```c# +if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "text/html") && oSession.utilFindInResponse("searchfor", false)>-1){ + oSession["ui-color"] = "red"; +} +``` **Remove all DIV tags (and content inside the DIV tag)** - // If content-type is HTML, then remove all DIV tags - if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "html")){ - // Remove any compression or chunking - oSession.utilDecodeResponse(); - var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes); - - // Replace all instances of the DIV tag with an empty string - var oRegEx = /]*>(.*?)<\/div>/gi; - oBody = oBody.replace(oRegEx, ""); - - // Set the response body to the div-less string - oSession.utilSetResponseBody(oBody); - } +```c# +// If content-type is HTML, then remove all DIV tags +if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "html")){ + // Remove any compression or chunking + oSession.utilDecodeResponse(); + var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes); + // Replace all instances of the DIV tag with an empty string + var oRegEx = /]*>(.*?)<\/div>/gi; + oBody = oBody.replace(oRegEx, ""); + // Set the response body to the div-less string + oSession.utilSetResponseBody(oBody); +} +``` **Pretend your browser is the GoogleBot webcrawler** - oSession.oRequest["User-Agent"]="Googlebot/2.X (+http://www.googlebot.com/bot.html)"; - - +```c# +oSession.oRequest["User-Agent"]="Googlebot/2.X (+http://www.googlebot.com/bot.html)"; +``` **Request Hebrew content** - oSession.oRequest["Accept-Language"]="he"; - - +```c# +oSession.oRequest["Accept-Language"]="he"; +``` **Deny .CSS requests** - if (oSession.uriContains(".css")){ - oSession["ui-color"]="orange"; - oSession["ui-bold"]="true"; - oSession.oRequest.FailSession(404, "Blocked", "Fiddler Classic blocked CSS file"); - } - - +```c# +if (oSession.uriContains(".css")){ + oSession["ui-color"]="orange"; + oSession["ui-bold"]="true"; + oSession.oRequest.FailSession(404, "Blocked", "Fiddler Classic blocked CSS file"); +} +``` **Simulate HTTP Basic authentication (Requires user to enter a password before displaying web content.)** - if ((oSession.HostnameIs("www.example.com")) && - !oSession.oRequest.headers.Exists("Authorization")) - { - // Prevent IE's "Friendly Errors Messages" from hiding the error message by making response body longer than 512 chars. - var oBody = "[Fiddler] Authentication Required.
".PadRight(512, ' ') + ""; - oSession.utilSetResponseBody(oBody); - // Build up the headers - oSession.oResponse.headers.HTTPResponseCode = 401; - oSession.oResponse.headers.HTTPResponseStatus = "401 Auth Required"; - oSession.oResponse["WWW-Authenticate"] = "Basic realm=\"Fiddler Classic (just hit Ok)\""; - oResponse.headers.Add("Content-Type", "text/html"); - } - +```c# +if ((oSession.HostnameIs("www.example.com")) && + !oSession.oRequest.headers.Exists("Authorization")) +{ +// Prevent IE's "Friendly Errors Messages" from hiding the error message by making response body longer than 512 chars. +var oBody = "[Fiddler] Authentication Required.
".PadRight(512, ' ') + ""; +oSession.utilSetResponseBody(oBody); +// Build up the headers +oSession.oResponse.headers.HTTPResponseCode = 401; +oSession.oResponse.headers.HTTPResponseStatus = "401 Auth Required"; +oSession.oResponse["WWW-Authenticate"] = "Basic realm=\"Fiddler Classic (just hit Ok)\""; +oResponse.headers.Add("Content-Type", "text/html"); +} +``` **Respond to a request with a file loaded from the \Captures\Responses folder** -(Can be placed in **OnBeforeRequest** or **OnBeforeResponse** function) - - if (oSession.PathAndQuery=="/version1.css") { - oSession["x-replywithfile"] ="version2.css"; - } +(Can be placed in `OnBeforeRequest` or `OnBeforeResponse` function) +```c# +if (oSession.PathAndQuery=="/version1.css") { + oSession["x-replywithfile"] ="version2.css"; +} +``` \ No newline at end of file diff --git a/knowledge-base/fiddlerscript/pausesessions.md b/knowledge-base/fiddlerscript/pausesessions.md index bcd4cfa..f3cb8d5 100644 --- a/knowledge-base/fiddlerscript/pausesessions.md +++ b/knowledge-base/fiddlerscript/pausesessions.md @@ -6,43 +6,37 @@ position: 5 res_type: kb --- -Pause Web Sessions -================== - -To pause specific sessions, [add rules][1] using FiddlerScript to the **OnBeforeRequest** function (except where noted). For example: - +To pause specific sessions, [add rules](slug://AddRules) using FiddlerScript to the `OnBeforeRequest` function (except where noted). For example: **Pause all HTTP POSTs to allow hand-editing (the POST verb is often used for submitting forms)** - if (oSession.HTTPMethodIs("POST")){ - oSession["x-breakrequest"]="breaking for POST"; - } - - +```c# +if (oSession.HTTPMethodIs("POST")){ + oSession["x-breakrequest"]="breaking for POST"; +} +``` **Pause all HTTP POSTs that contain 'thekeyword'** - if (oSession.HTTPMethodIs("POST") && (oSession.utilFindInRequest("thekeyword", true) > -1)){ - oSession["x-breakrequest"] = "keyword"; - } - - +```c# +if (oSession.HTTPMethodIs("POST") && (oSession.utilFindInRequest("thekeyword", true) > -1)){ +oSession["x-breakrequest"] = "keyword"; +} +``` **Pause a request for an XML file to allow hand-editing** - if (oSession.url.toLowerCase().indexOf(".xml")>-1){ - oSession["x-breakrequest"]="reason_XML"; - } - - - -**Pause a response containing JavaScript to allow hand-editing** -(in **OnBeforeResponse**) - - if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "javascript")){ - oSession["x-breakresponse"]="reason is JScript"; - } +```c# +if (oSession.url.toLowerCase().indexOf(".xml")>-1){ + oSession["x-breakrequest"]="reason_XML"; +} +``` +**Pause a response containing JavaScript to allow hand-editing** (in `OnBeforeResponse`) -[1]: ../../Extend-Fiddler/AddRules \ No newline at end of file +```c# +if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "javascript")){ + oSession["x-breakresponse"]="reason is JScript"; +} +``` \ No newline at end of file diff --git a/knowledge-base/fiddlerscript/perftesting.md b/knowledge-base/fiddlerscript/perftesting.md index dfec5bc..1abbf3b 100644 --- a/knowledge-base/fiddlerscript/perftesting.md +++ b/knowledge-base/fiddlerscript/perftesting.md @@ -6,80 +6,73 @@ position: 2 res_type: kb --- -Performance Testing -=================== - -To test application performance, [add rules][1] using FiddlerScript to the **OnBeforeResponse** function (except where noted). For example: - - +To test application performance, [add rules](slug://AddRules) using FiddlerScript to the **OnBeforeResponse** function (except where noted). For example: **Simulate modem uploads** (add to **OnBeforeRequest** function) - // Delay sends by 300ms per KB uploaded. - oSession["request-trickle-delay"] = "300"; - - +```c# +// Delay sends by 300ms per KB uploaded. +oSession["request-trickle-delay"] = "300"; +``` **Simulate modem downloads** - // Delay receives by 150ms per KB downloaded. - oSession["response-trickle-delay"] = "150"; - - +```c# +// Delay receives by 150ms per KB downloaded. +oSession["response-trickle-delay"] = "150"; +``` **Flag content which isn't set to cache on the client.** - if (!(oSession.oResponse.headers.Exists("Expires") - || (oSession.oResponse.headers.ExistsAndContains("Cache-Control", "age"))) - || (oSession.oResponse.headers.Exists("Vary"))){ - { - oSession["ui-color"]="brown"; // Use C# color strings here. - oSession["ui-italic"]="true"; - } - - +```c# +if (!(oSession.oResponse.headers.Exists("Expires") +|| (oSession.oResponse.headers.ExistsAndContains("Cache-Control", "age"))) +|| (oSession.oResponse.headers.Exists("Vary"))){ +{ +oSession["ui-color"]="brown"; // Use C# color strings here. +oSession["ui-italic"]="true"; +} +``` **Display in the "Custom Column" the number of milliseconds from the moment of the request until the last byte was received.** - oSession["ui-customcolumn"] = oSession["X-TTLB"]; - - +```c# +oSession["ui-customcolumn"] = oSession["X-TTLB"]; +``` **Display the # of milliseconds until the First Byte was received from the server, followed by the # of ms until the Last Byte.** - oSession["ui-customcolumn"] = "FB: " + oSession["X-TTFB"] + "; LB: " + oSession["X-TTLB"]; - - - -**Add a CopyTimers context menu item to the Session List** -(Scope is **Global**) - - public static ContextAction("CopyTimers") - function CopyTimers(oSessions: Fiddler.Session[]){ - if (null == oSessions){ - MessageBox.Show("Please select sessions to copy timers for.", "Nothing to Do"); - return; - } - - var s: System.Text.StringBuilder = new System.Text.StringBuilder(); - - for (var x = 0; x < oSessions.Length; x++) { - s.AppendFormat("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}\r\n", - oSessions[x].Timers.ClientConnected, - oSessions[x].Timers.ClientDoneRequest, - oSessions[x].Timers.ServerConnected, - oSessions[x].Timers.ServerGotRequest, - oSessions[x].Timers.ServerBeginResponse, - oSessions[x].Timers.ServerDoneResponse, - oSessions[x].Timers.ClientBeginResponse, - oSessions[x].Timers.ClientDoneResponse - ); - } - Utilities.CopyToClipboard(s.ToString()); - MessageBox.Show("Done."); - } - - - -[1]: ../../Extend-Fiddler/AddRules +```c# +oSession["ui-customcolumn"] = "FB: " + oSession["X-TTFB"] + "; LB: " + oSession["X-TTLB"]; +``` + +**Add a CopyTimers context menu item to the Session List** (Scope is **Global**) + +```c# +public static ContextAction("CopyTimers") +function CopyTimers(oSessions: Fiddler.Session[]){ + if (null == oSessions){ + MessageBox.Show("Please select sessions to copy timers for.", "Nothing to Do"); + return; + } + + var s: System.Text.StringBuilder = new System.Text.StringBuilder(); + + for (var x = 0; x < oSessions.Length; x++) { + s.AppendFormat("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}\r\n", + oSessions[x].Timers.ClientConnected, + oSessions[x].Timers.ClientDoneRequest, + oSessions[x].Timers.ServerConnected, + oSessions[x].Timers.ServerGotRequest, + oSessions[x].Timers.ServerBeginResponse, + oSessions[x].Timers.ServerDoneResponse, + oSessions[x].Timers.ClientBeginResponse, + oSessions[x].Timers.ClientDoneResponse + ); + } + Utilities.CopyToClipboard(s.ToString()); + MessageBox.Show("Done."); +} + +``` \ No newline at end of file diff --git a/knowledge-base/fiddlerscript/sessionalerts.md b/knowledge-base/fiddlerscript/sessionalerts.md index 92f003a..9c6a479 100644 --- a/knowledge-base/fiddlerscript/sessionalerts.md +++ b/knowledge-base/fiddlerscript/sessionalerts.md @@ -6,26 +6,21 @@ position: 6 res_type: kb --- -Session Alerts -============== +To create alerts for specific sessions, [add rules](slug://AddRules) using FiddlerScript. For example: -To create alerts for specific sessions, [add rules][1] using FiddlerScript. For example: +**Play a sound when a file is missing.** (in `OnBeforeResponse`) +```c# +if (oSession.responseCode == 404){ + FiddlerObject.playSound("C:\\windows\\media\\ding.wav"); + oSession["ui-strikeout"]="true"; +} +``` +**Show HTTP POST bodies in a messagebox** (in `OnBeforeRequest`) -**Play a sound when a file is missing.** -(in **OnBeforeResponse**) +```c# +var oBodyString = oSession.GetRequestBodyAsString(); - if (oSession.responseCode == 404){ - FiddlerObject.playSound("C:\\windows\\media\\ding.wav"); - oSession["ui-strikeout"]="true"; - } - -**Show HTTP POST bodies in a messagebox** -(in **OnBeforeRequest**) - - var oBodyString = oSession.GetRequestBodyAsString(); - - if (oBodyString.Length > 0) FiddlerObject.alert(oBodyString); - -[1]: ../../Extend-Fiddler/AddRules +if (oBodyString.Length > 0) FiddlerObject.alert(oBodyString); +``` \ No newline at end of file diff --git a/knowledge-base/filters.md b/knowledge-base/filters.md index 5eda9b2..a795d18 100644 --- a/knowledge-base/filters.md +++ b/knowledge-base/filters.md @@ -7,15 +7,29 @@ position: 5 res_type: kb --- -Filters Reference -================= + +## Environment + + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
+ +## Filters Reference Fiddler's Filters tab allows you to easily filter and flag traffic displayed in the Fiddler Classic UI, as well as perform some lightweight modifications. This article describes the available filtering options and their usage. -Hosts ------ +## Hosts The **Zone Filter** dropdown at the top of the dialog allows you to show traffic only to your Intranet (e.g. dotless hostnames) or only to the Internet (e.g. dotted hostnames). This is a useful option when debugging a site in one zone while referencing web-based documentation from the other zone. @@ -51,10 +65,8 @@ The following table summarizes the filters that we used to demonstrate how to di When configured to hide traffic to certain hosts, Fiddler Classic will still proxy traffic to those hosts, but that traffic will be hidden from the Fiddler Classic Session List. List multiple hosts using a semi-colon. -![Filter to Hosts][1] - -Client Process --------------- +![Filter to Hosts](./images/FilterToHosts.png) +## Client Process The process filter allows you to control which processes' traffic is shown within Fiddler. @@ -63,13 +75,11 @@ The **Hide traffic from Service Host** option will hide traffic from svchost.exe >Fiddler Classic can only determine the process name/PID owner of a request when the client application is running on the same computer as Fiddler Classic itself. >When configured to hide traffic from certain processes, Fiddler Classic will still proxy their traffic, but that traffic will be hidden from the Fiddler Classic Session List. -Breakpoints ------------ +## Breakpoints The breakpoints enable you to break requests or responses that contain the specified attributes. -Request Headers ---------------- +## Request Headers Using these options, you can add or remove HTTP request headers, and flag responses that contain certain headers. @@ -83,23 +93,20 @@ or you can use regular expressions, so you can use: ```sh REGEX:(?insx).*\.(gif|png|jpg)$ #only show requests for img types ``` -Response Status Code --------------------- + +## Response Status Code Using these options, you can filter display of responses based on the Response Status Code. You can set the boxes to hide sessions whose responses code match target values [HTTP errors, redirects, authentication challenges and cache-reuse]. -Response Type and Size ----------------------- +## Response Type and Size Using these options, you can control what types of responses appear within the session list. The list of "Block" checkboxes enables blocking responses of the specified types, returning a HTTP/404 error to the client instead of the target resource. -Response Headers ----------------- +## Response Headers Using these options, you can add or remove HTTP response headers, and flag responses that contain certain headers. -[1]: ../images/Filters/FilterToHosts.png diff --git a/knowledge-base/headers.md b/knowledge-base/headers.md index ee57682..71e6d16 100644 --- a/knowledge-base/headers.md +++ b/knowledge-base/headers.md @@ -6,8 +6,22 @@ position: 8 res_type: kb --- -Headers References --------------- +## Environment + + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
+ +## Headers References This article lists several popular references for HTTP headers. We also explain some of the [frequently misinterpreted HTTP headers](#additional-Information). @@ -17,19 +31,14 @@ References for HTTP Response Status codes: + [IANA Header Registrations][4] + [Jukka Korpela's list of HTTP Headers][5] -Additional Information ----------------------- +## Additional Information Following are some remarks on a few of the HTTP headers that are often misunderstood. - - **Expires** Date the response expires and should no longer be used by a cache. See [http://www.mnot.net/cache_docs/][6] or pg 183. Note that this header should be overruled by the Cache-Control header in a HTTP1.1 client. - - **Cache-Control: must-revalidate** Note that the O'Reilly book (and many other places, including IE) implement this incorrectly! See [http://www.mnot.net/cache_docs/][6] or [RFC2616][7]. diff --git a/knowledge-base/hosts.md b/knowledge-base/hosts.md index a1fad91..6f2d607 100644 --- a/knowledge-base/hosts.md +++ b/knowledge-base/hosts.md @@ -6,11 +6,22 @@ position: 9 res_type: kb --- -Overriding HOSTS -================ - -Introduction ------------- +## Environment + + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
+ +## Overriding HOSTS The **HOSTS...** command on the **Tools** menu allows you to easily retarget requests from one host to another. @@ -19,7 +30,7 @@ How does it work? In the box, enter a list of overrides, one per line. The new hostname or IP address should be placed in the first column, followed by the corresponding original host name to override. The override and original hostname should be separated by at least one whitespace character. -![Host Remapping][1] +![Host Remapping](./images/HOSTS.png) Any line may be preceded by a **#** sign to indicate that the line contains a comment. @@ -27,8 +38,8 @@ You may import the Windows **Hosts** file (%SYSTEMROOT%\System32\drivers\etc\hos Unlike the Windows HOSTS file, you don't need to specify the IP address of the new target; you can specify a hostname instead. You can also specify a port, so the following rule: - 127.0.0.1:8088 meddler - -will send all requests for **http://meddler/** to **http://127.0.0.1:8088**. +```txt +127.0.0.1:8088 meddler +``` -[1]: ../images/HOSTS/HOSTS.png +will send all requests for **http://meddler/** to **http://127.0.0.1:8088**. \ No newline at end of file diff --git a/knowledge-base/http.md b/knowledge-base/http.md index c585e6f..2dd7d8d 100644 --- a/knowledge-base/http.md +++ b/knowledge-base/http.md @@ -6,15 +6,27 @@ position: 11 res_type: kb --- - +## Environment -# HTTP References + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
+ +## HTTP References -## RFCs * [HTTP Response codes (RFC 2616)](https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) and [HTTP Response Codes (Wikipedia)](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) * [HTTP Header Definitions](https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html) * [HTTP 1.1 Specification (RFC 2616)](http://www.rfc-editor.org/rfc/rfc2616.txt) -## Other Useful specs +## Other Useful Specs * [Unicode and Character Sets](http://www.joelonsoftware.com/articles/Unicode.html) * [Regular Expressions Tutorial](http://www.regular-expressions.info/) diff --git a/images/UIGuide/300.png b/knowledge-base/images/300.png similarity index 100% rename from images/UIGuide/300.png rename to knowledge-base/images/300.png diff --git a/images/UIGuide/304.png b/knowledge-base/images/304.png similarity index 100% rename from images/UIGuide/304.png rename to knowledge-base/images/304.png diff --git a/images/UIGuide/Audio.png b/knowledge-base/images/Audio.png similarity index 100% rename from images/UIGuide/Audio.png rename to knowledge-base/images/Audio.png diff --git a/images/Timeline/BufferingMode.png b/knowledge-base/images/BufferingMode.png similarity index 100% rename from images/Timeline/BufferingMode.png rename to knowledge-base/images/BufferingMode.png diff --git a/images/UIGuide/CSS.png b/knowledge-base/images/CSS.png similarity index 100% rename from images/UIGuide/CSS.png rename to knowledge-base/images/CSS.png diff --git a/images/UIGuide/ContextMenu.png b/knowledge-base/images/ContextMenu.png similarity index 100% rename from images/UIGuide/ContextMenu.png rename to knowledge-base/images/ContextMenu.png diff --git a/images/UIGuide/CopyMenu.png b/knowledge-base/images/CopyMenu.png similarity index 100% rename from images/UIGuide/CopyMenu.png rename to knowledge-base/images/CopyMenu.png diff --git a/images/Download-Initiator/Download-Initiator.png b/knowledge-base/images/Download-Initiator.png similarity index 100% rename from images/Download-Initiator/Download-Initiator.png rename to knowledge-base/images/Download-Initiator.png diff --git a/images/FiddlerHook/Enable.png b/knowledge-base/images/Enable.png similarity index 100% rename from images/FiddlerHook/Enable.png rename to knowledge-base/images/Enable.png diff --git a/images/FiddlerHookOptions.png b/knowledge-base/images/FiddlerHookOptions.png similarity index 100% rename from images/FiddlerHookOptions.png rename to knowledge-base/images/FiddlerHookOptions.png diff --git a/images/Filters/FilterToHosts.png b/knowledge-base/images/FilterToHosts.png similarity index 100% rename from images/Filters/FilterToHosts.png rename to knowledge-base/images/FilterToHosts.png diff --git a/images/UIGuide/Flash.png b/knowledge-base/images/Flash.png similarity index 100% rename from images/UIGuide/Flash.png rename to knowledge-base/images/Flash.png diff --git a/images/UIGuide/Font.png b/knowledge-base/images/Font.png similarity index 100% rename from images/UIGuide/Font.png rename to knowledge-base/images/Font.png diff --git a/images/HOSTS/HOSTS.png b/knowledge-base/images/HOSTS.png similarity index 100% rename from images/HOSTS/HOSTS.png rename to knowledge-base/images/HOSTS.png diff --git a/images/UIGuide/HTML.png b/knowledge-base/images/HTML.png similarity index 100% rename from images/UIGuide/HTML.png rename to knowledge-base/images/HTML.png diff --git a/images/Proxy/IEProxySettings.png b/knowledge-base/images/IEProxySettings.png similarity index 100% rename from images/Proxy/IEProxySettings.png rename to knowledge-base/images/IEProxySettings.png diff --git a/images/UIGuide/Image.png b/knowledge-base/images/Image.png similarity index 100% rename from images/UIGuide/Image.png rename to knowledge-base/images/Image.png diff --git a/images/UIGuide/JSON.png b/knowledge-base/images/JSON.png similarity index 100% rename from images/UIGuide/JSON.png rename to knowledge-base/images/JSON.png diff --git a/images/UIGuide/QuickExec.png b/knowledge-base/images/QuickExec.png similarity index 100% rename from images/UIGuide/QuickExec.png rename to knowledge-base/images/QuickExec.png diff --git a/images/QuickExecReference/QuickExecBox.png b/knowledge-base/images/QuickExecBox.png similarity index 100% rename from images/QuickExecReference/QuickExecBox.png rename to knowledge-base/images/QuickExecBox.png diff --git a/images/UIGuide/RequestBeingRead.png b/knowledge-base/images/RequestBeingRead.png similarity index 100% rename from images/UIGuide/RequestBeingRead.png rename to knowledge-base/images/RequestBeingRead.png diff --git a/images/UIGuide/RequestBeingSent.png b/knowledge-base/images/RequestBeingSent.png similarity index 100% rename from images/UIGuide/RequestBeingSent.png rename to knowledge-base/images/RequestBeingSent.png diff --git a/images/UIGuide/RequestClientCredentials.png b/knowledge-base/images/RequestClientCredentials.png similarity index 100% rename from images/UIGuide/RequestClientCredentials.png rename to knowledge-base/images/RequestClientCredentials.png diff --git a/images/UIGuide/RequestPaused.png b/knowledge-base/images/RequestPaused.png similarity index 100% rename from images/UIGuide/RequestPaused.png rename to knowledge-base/images/RequestPaused.png diff --git a/images/UIGuide/RequestUsedCONNECT.png b/knowledge-base/images/RequestUsedCONNECT.png similarity index 100% rename from images/UIGuide/RequestUsedCONNECT.png rename to knowledge-base/images/RequestUsedCONNECT.png diff --git a/images/UIGuide/RequestUsedHEAD.png b/knowledge-base/images/RequestUsedHEAD.png similarity index 100% rename from images/UIGuide/RequestUsedHEAD.png rename to knowledge-base/images/RequestUsedHEAD.png diff --git a/images/UIGuide/RequestUsedPost.png b/knowledge-base/images/RequestUsedPost.png similarity index 100% rename from images/UIGuide/RequestUsedPost.png rename to knowledge-base/images/RequestUsedPost.png diff --git a/images/UIGuide/ResponsePaused.png b/knowledge-base/images/ResponsePaused.png similarity index 100% rename from images/UIGuide/ResponsePaused.png rename to knowledge-base/images/ResponsePaused.png diff --git a/images/UIGuide/SaveMenu.png b/knowledge-base/images/SaveMenu.png similarity index 100% rename from images/UIGuide/SaveMenu.png rename to knowledge-base/images/SaveMenu.png diff --git a/images/UIGuide/Script.PNG b/knowledge-base/images/Script.PNG similarity index 100% rename from images/UIGuide/Script.PNG rename to knowledge-base/images/Script.PNG diff --git a/images/UIGuide/ServerError.png b/knowledge-base/images/ServerError.png similarity index 100% rename from images/UIGuide/ServerError.png rename to knowledge-base/images/ServerError.png diff --git a/images/UIGuide/SessionAborted.png b/knowledge-base/images/SessionAborted.png similarity index 100% rename from images/UIGuide/SessionAborted.png rename to knowledge-base/images/SessionAborted.png diff --git a/images/UIGuide/Silverlight.png b/knowledge-base/images/Silverlight.png similarity index 100% rename from images/UIGuide/Silverlight.png rename to knowledge-base/images/Silverlight.png diff --git a/images/UIGuide/Successful.png b/knowledge-base/images/Successful.png similarity index 100% rename from images/UIGuide/Successful.png rename to knowledge-base/images/Successful.png diff --git a/images/Proxy/TrafficFlow.png b/knowledge-base/images/TrafficFlow.png similarity index 100% rename from images/Proxy/TrafficFlow.png rename to knowledge-base/images/TrafficFlow.png diff --git a/images/Timeline/TransferTimeline.png b/knowledge-base/images/TransferTimeline.png similarity index 100% rename from images/Timeline/TransferTimeline.png rename to knowledge-base/images/TransferTimeline.png diff --git a/images/UIGuide/UIOverview.png b/knowledge-base/images/UIOverview.png similarity index 100% rename from images/UIGuide/UIOverview.png rename to knowledge-base/images/UIOverview.png diff --git a/images/Proxy/UpstreamProxy.png b/knowledge-base/images/UpstreamProxy.png similarity index 100% rename from images/Proxy/UpstreamProxy.png rename to knowledge-base/images/UpstreamProxy.png diff --git a/images/UIGuide/Video.png b/knowledge-base/images/Video.png similarity index 100% rename from images/UIGuide/Video.png rename to knowledge-base/images/Video.png diff --git a/images/UIGuide/XML.png b/knowledge-base/images/XML.png similarity index 100% rename from images/UIGuide/XML.png rename to knowledge-base/images/XML.png diff --git a/images/fhmenu.png b/knowledge-base/images/fhmenu.png similarity index 100% rename from images/fhmenu.png rename to knowledge-base/images/fhmenu.png diff --git a/images/fiddlerhook-step1.png b/knowledge-base/images/fiddlerhook-step1.png similarity index 100% rename from images/fiddlerhook-step1.png rename to knowledge-base/images/fiddlerhook-step1.png diff --git a/images/fiddlerhook2.png b/knowledge-base/images/fiddlerhook2.png similarity index 100% rename from images/fiddlerhook2.png rename to knowledge-base/images/fiddlerhook2.png diff --git a/knowledge-base/importexportformats.md b/knowledge-base/importexportformats.md index 0a0a225..5ce23c2 100644 --- a/knowledge-base/importexportformats.md +++ b/knowledge-base/importexportformats.md @@ -7,13 +7,26 @@ position: 18 res_type: kb --- -Fiddler Classic Import and Export Formats -================================= +## Environment + + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
+ +## Fiddler Classic Import and Export Formats Fiddler Classic supports the following formats by default: -Import ------- +### Import + **HTTP Archive JSON** @@ -21,8 +34,7 @@ Import These files are exported from the [IE9 Developer Tools Network Tab][1]. -Export ------- +## Export + **[HTTP Archive JSON v1.1][2]** (*.har) @@ -32,7 +44,9 @@ Export This format supports storage of non-textual response bodies. Because these .har files are not compressed, Fiddler Classic will only store non-textual content smaller than 32kb by default. This limit can be increased by setting a [Fiddler Classic Preference][5]: - fiddler.importexport.HTTPArchiveJSON.MaxBinaryBodyLength +```txt +fiddler.importexport.HTTPArchiveJSON.MaxBinaryBodyLength +``` + **Visual Studio Web Test XML** @@ -46,8 +60,7 @@ Export + **HTML5 AppCache Manifests** -Custom Import and Export Classes --------------------------------- +## Custom Import and Export Classes Beyond these default formats, developers can create their own Import and Export classes by implementing the [ISessionImporter and ISessionExporter][6] interfaces using any .NET language. There is no particular requirement that the classes store data in a file. You could build a class that saves or loads traffic from a local database or a data store in the cloud. diff --git a/knowledge-base/keyboard.md b/knowledge-base/keyboard.md index ed94ef1..abd8f2c 100644 --- a/knowledge-base/keyboard.md +++ b/knowledge-base/keyboard.md @@ -6,16 +6,29 @@ position: 2 res_type: kb --- -Keyboard Reference -================== +## Environment -System-wide ------------ + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
+ +## Keyboard Reference + +### System-wide + CTRL+ALT+F - Bring Fiddler Classic to the foreground. Hotkey may be adjusted using **Tools > Options**. -App-wide --------- +### App-wide + + Alt+S - Focus the Web Sessions List + Alt+Q - Activate the [QuickExec command line][1], allowing access to many more functions from the keyboard. + CTRL+F - Find sessions @@ -24,8 +37,7 @@ App-wide + CTRL+Up - Select prior session + CTRL+Down - Select next session -Session List ------------- +### Session List + CTRL+A - Select all sessions + CTRL+I - Invert selection of sessions @@ -47,22 +59,19 @@ Session List + Shift+Delete - Delete unselected sessions + Spacebar - Scroll selected session into view -Header Inspector ----------------- +### Header Inspector + CTRL+C - Copy the active header to the clipboard + ENTER - Edit the active header. (When the a session is paused, the headers are editable (note the white background) + Delete - Remove the active header + INSERT - Add a new header. Note that it doesn't matter what grouping you put the header under; the groupings are for reading convenience only. -TextView Inspector ------------------- +### TextView Inspector + CTRL+G - Goto line #. (Disables word wrap) + F3 - Find next -HexView Inspector ------------------ +### HexView Inspector + CTRL+G - Goto byte diff --git a/knowledge-base/optionsui.md b/knowledge-base/optionsui.md index 07ba30d..6a61185 100644 --- a/knowledge-base/optionsui.md +++ b/knowledge-base/optionsui.md @@ -6,11 +6,25 @@ position: 6 res_type: kb --- - +## Environment -# Fiddler Classic Options + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
+ +## Fiddler Classic Options + +### General -## General * **Check for updates on startup** controls whether Fiddler Classic will contact the version-checking web service on startup. * **Show a message when HTTP protocol violations encountered** controls whether Fiddler Classic notifies you if it observes HTTP protocol violations. * **Enable IPv6** controls whether or not Fiddler Classic will connect to HTTP servers using IPv6, if available. @@ -19,19 +33,22 @@ res_type: kb * **Automatically stream audio & video** controls whether Fiddler Classic will use [streaming mode](http://fiddler2.com/Fiddler/help/streaming.asp) when downloading audio and video content-types. * The **Systemwide Hotkey** checkbox permits you to pick a hotkey which will restore and activate Fiddler Classic when it is inactive or minimized. -## HTTPS +### HTTPS + * **Capture HTTPS CONNECTs** controls whether Fiddler Classic will attempt to create tunnels through which secure traffic will flow. * **Decrypt HTTPS traffic** controls whether Fiddler Classic will [decrypt](http://www.fiddler2.com/redir/?id=HTTPSDECRYPTION) the requests and responses within those secure tunnels. * **Ignore server certificate errors** controls whether Fiddler Classic will warn you if an HTTPS server has presented a certificate that did not validate. You should not check this box when surfing the Internet due to the spoofing security threat. * *Show data from RPASpy controls whether or not Fiddler Classic will show HTTPS headers reported by the deprecated [RPASpy addon.](http://www.fiddler2.com/redir/?id=RPASPY)* -## Extensions +### Extensions + * **Automatically reload script when changed** controls whether or not Fiddler Classic will automatically reload the FiddlerScript rules file when it detects that the file has been changed. * The **Editor** text box allows you to control which text editor is used to edit the FiddlerScript. The "..." button will launch a dialog to allow selection of the editor. The [FiddlerScriptEditor](http://fiddler2.com/fiddler/fse.asp) is a popular choice. * The References text box allows you to specify any additional assemblies that your FiddlerScript depends upon. * The **Find more extensions** link opens the [Fiddler Classic Add-ons page.](http://www.fiddler2.com/redir/?id=FIDDLEREXTENSIONS) -## Connections +### Connections + * The **Fiddler Classic listens on port** textbox controls which port Fiddler Classic uses to listen for web traffic. * The **Copy Browser Proxy Config URL** link copies a proxy-configuration-script link that you can paste into a client's proxy configuration screen. This option is rarely useful, but learn more [here.](../Configure-Fiddler/Tasks/ConfigureBrowsers) * **Allow remote computers to connect** controls whether or not Fiddler Classic will accept HTTP requests from other computers. @@ -48,9 +65,10 @@ By unchecking this checkbox, you're telling Fiddler Classic *"ignore my browser' * The **WinINET Connections** list shows what network connections are configured for this machine. This may be useful if you are connected to the Internet via dialup or VPN and want Fiddler Classic to automatically hook a connection other than your LAN connection. * The **IE should bypass Fiddler** list controls which requests should not be sent through Fiddler Classic at all when it is registered as the system proxy. Note that this list is generally only respected by WinINET clients like Internet Explorer. -## Appearance +### Appearance + * The **Font Size** box allows you to select the font-size Fiddler Classic will use. A restart is required to fully complete the change. * The **Set Readonly Color** button allows you to select the background color for text boxes which are in a readonly state. This setting primarily exists because gray is the default for Windows and gray is kinda ugly. A restart is required to complete this change. * The **Hide Fiddler Classic when minimized** checkbox will show the Fiddler Classic icon in your system tray rather than the task bar when Fiddler Classic is minimized. * The **Use SmartScroll** option controls whether or not Fiddler Classic will auto-scroll to the bottom of the session list when new sessions are added but you've manually scrolled the list to an earlier session. -* **Reset Session ID counter on CTRL+X** will cause the session id numbering to restart from 0 when the Session list is cleared via Remove > All Sessions, or when you use the CTRL+X hotkey. +* **Reset Session ID counter on CTRL+X** will cause the session id numbering to restart from 0 when the Session list is cleared via Remove > All Sessions, or when you use the CTRL+X hotkey. \ No newline at end of file diff --git a/knowledge-base/proxy.md b/knowledge-base/proxy.md index b477a00..26c5a15 100644 --- a/knowledge-base/proxy.md +++ b/knowledge-base/proxy.md @@ -7,29 +7,39 @@ position: 8 res_type: kb --- -The Fiddler Classic Proxy -================= +## Environment + + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
+ +## The Fiddler Classic Proxy After you start Fiddler, the program registers itself as the system proxy for Microsoft Windows Internet Services (WinInet), the HTTP layer used by Internet Explorer, Microsoft Office, and many other products. You can verify that Fiddler Classic is correctly intercepting requests by checking the Proxy Settings dialog. From the Internet Explorer main menu, click **Tools > Internet Options > Connections > LAN Setting > Advanced**. -![IE Proxy Settings][1] +![IE Proxy Settings](./images/IEProxySettings.png) As the system proxy, all HTTP requests from WinInet flow through Fiddler Classic before reaching the target Web servers. Similarly, all HTTP responses flow through Fiddler before being returned to the client application. -![HTTP Traffic Flow][2] +![HTTP Traffic Flow](./images/TrafficFlow.png) When you close Fiddler, it unregisters itself as the system proxy before shutting down. -Chaining to an Upstream Proxy ------------------------------ +## Chaining to an Upstream Proxy All current versions of Fiddler Classic support chaining to upstream proxies (either autodetected or manually specified). The result is an architecture like this: - ![Upstream Proxy Architecture][3] + ![Upstream Proxy Architecture](./images/UpstreamProxy.png) -Note that Fiddler Classic does not support upstream proxy configuration scripts that are accessed using the FILE:// protocol, only those accessed using the HTTP or HTTPS protocols (so far, no one seems to have hit this limitation in the last 6 years). -[1]: ../images/Proxy/IEProxySettings.png -[2]: ../images/Proxy/TrafficFlow.png -[3]: ../images/Proxy/UpstreamProxy.png +Note that Fiddler Classic does not support upstream proxy configuration scripts that are accessed using the FILE:// protocol, only those accessed using the HTTP or HTTPS protocols (so far, no one seems to have hit this limitation in the last 6 years). \ No newline at end of file diff --git a/knowledge-base/quickexec.md b/knowledge-base/quickexec.md index 7a571d6..be064a7 100644 --- a/knowledge-base/quickexec.md +++ b/knowledge-base/quickexec.md @@ -7,214 +7,248 @@ position: 1 res_type: kb --- -Using QuickExec -=============== +## Environment + + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
+ +## Using QuickExec Fiddler Classic's QuickExec box allows you to launch script-commands quickly. - ![QuickExec Box][1] + ![QuickExec Box](./images/QuickExecBox.png) Keyboard Shortcuts ------------------ + Hit ALT+Q to quickly set focus to the QuickExec box. If Fiddler Classic isn't active, hit CTRL+ALT+F first to activate Fiddler. + In the QuickExec box, hit CTRL+I to insert the URL of the currently selected session in the session list. +## Default commands - -Default commands ----------------- - -**?sometext** +- **?sometext** As you type sometext, Fiddler Classic will highlight sessions where the URL contains sometext. Hit Enter to set focus to the selected matches. - ?searchtext +```sh +?searchtext +``` -**>size** +- **>size** Select sessions where response size is greater than size bytes. - >40000 <-- Select responses over 40kb +```sh +>40000 # Select responses over 40kb +``` -Also: - - + + + Product Version + 5.0.20253 + + + Product + Progress® Telerik® Fiddler Classic + + + +## Fiddler Classic SessionFlags -Using SessionFlags ------------------- +Each Session object in Fiddler Classic contains a collection of string flags, in the **Session.oFlags[]** collection. The flags control how the session is processed and displayed in the Fiddler Classic Web Session List. Flags can be set by [FiddlerScript][(slug://AddRules) or an [IFiddlerExtension](slug://Interfaces). + + +### Using SessionFlags + Flag names are not case-sensitive. @@ -36,8 +49,7 @@ Using SessionFlags + You can create new flags that attach metadata to a given session. To avoid naming conflicts, it's recommended that you choose distinctive flagnames. For example: **addon.acme.loggingFlag**. -UI Flags --------- +### UI Flags **ui-hide** @@ -47,200 +59,134 @@ Hide the session from the Session List. + Breakpoints on hidden sessions are ignored. + Note: hiding a session will free up the memory that would otherwise be used to hold the session data in memory. - - **ui-color** The value of this flag determines the font color used to render this session in the Session List. - - **ui-backcolor** The value of this flag determines the background color used behind this session's entry in the Session List. - - **ui-bold** If present, this session's entry will be bolded in the Session List. - - **ui-italic** If present, this session's entry will be italicized in the Session List. - - **ui-strikeout** If present, this session's entry will be struck out in the Session List. - - **ui-customcolumn** The value of this flag is shown in the Fiddler Classic Session List's "User-defined" column. - - **ui-comments** The Comment, if any, which the user set on this session. - - -Breakpoint Flags ----------------- +### Breakpoint Flags **x-breakrequest** If present, execution of this session will pause before the request is issued. - - **x-breakresponse** If present, execution of this session will pause after the response is received. - - -Host Flags ---------- +### Host Flags **x-overrideHost** Provide the Host:Port combination which should be used for DNS resolution purposes. Note that this mechanism does not change the HOST header on the request, and thus is not useful if there's an upstream gateway. - - **x-hostIP** -Read-only. Indicates the IP address of the server used for this request. - - +Read-only. Indicates the IP address of the server used for this request. **x-overrideGateway** Provide the Host:Port combination of a gateway that should be used to proxy this request, or DIRECT to send the request directly to the origin server. - -Client Flags ------------- +### Client Flags **x-ProcessInfo** Information (module name and ProcessID) on source of local requests. Requires Fiddler Classic v2.1.4.1 or later. - - **x-clientIP** Read-only. Indicates the client IP that sent this request. Mostly useful when multiple computers on a network are pointed to a single Fiddler Classic instance. - - **x-clientport** Read-only. Indicates the port on the client that sent this request. - - -Socket Reuse Flags ------------------- +### Socket Reuse Flags **x-serversocket** Read-only. String containing data about the reuse status of the server socket. - - **x-securepipe** Read-only. String containing data about the reuse status of a secure server socket. - - -Decryption and Authentication Flags ------------------------------------ +### Decryption and Authentication Flags **x-no-decrypt** If set on a CONNECT tunnel, the traffic in the tunnel will not be decrypted. Requires Fiddler Classic v2.0.8.9 or later. - - **https-Client-Certificate** Filename of client certificate (e.g. .CER) that should be attached to this secure request. Requires Fiddler Classic v2.1.0.3 or later. - - **x-OverrideCertCN** String specifying the hostname that should appear in the CN field of this CONNECT tunnel's Fiddler-generated certificate. - - **x-SuppressProxySupportHeader** Prevent Fiddler Classic from adding a "Proxy-Support: Session-Based-Authentication" header to HTTP/401 or HTTP/407 responses that request Negotiate or NTLM authentication. Requires Fiddler Classic v2.1.4.2 or later. - - -Performance Flags ------------------ +### Performance Flags **x-TTFB** Deprecated. Use oSession.Timer instead. Time to the first byte of the response, in milliseconds. - - **x-TTLB** Deprecated. Use oSession.Timer instead. Time to the last byte of the response, in milliseconds. - - **request-trickle delay** Milliseconds to delay each outbound kilobyte of request data. - - **response-trickle-delay** Milliseconds to delay each inbound kilobyte of response data. - - -AutoResponder Flags -------------------- +### AutoResponder Flags **x-replywithfile** The value of this flag is the name of a file in the Captures/Responses folder (or a fully-qualified filename) containing a HTTP response to return to the client rather than sending the request to the server. - - **x-repliedwithfile** Read-only. Contains the name of the file specified in x-replywithfile, after the automatic response was loaded. - - -Drop Sessions Flags -------------------- +### Drop Sessions Flags **log-drop-request-body** Drop the request body from the session list after request is sent to the server. Useful for minimizing memory usage. - - **log-drop-response-body** -Drop the request body from the session list after response is sent to the client. Useful for minimizing memory usage. - +Drop the request body from the session list after response is sent to the client. Useful for minimizing memory usage. \ No newline at end of file diff --git a/knowledge-base/timeline.md b/knowledge-base/timeline.md index 3b6743f..e52c52a 100644 --- a/knowledge-base/timeline.md +++ b/knowledge-base/timeline.md @@ -7,20 +7,32 @@ position: 4 res_type: kb --- -Timeline View -============= +## Environment -Introduction ------------- + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
+ +## Timeline View + +## Introduction The Fiddler Classic **Timeline View** allows you to visualize the HTTP(S) traffic on a "waterfall" diagram. Hovering over any entry will show more information about the entry. Double-clicking the entry will inspect that session. -![Transfer Timeline][1] +![Transfer Timeline](./images/TransferTimeline.png) -How is the diagram interpreted ------------------------------- +## How is the diagram interpreted + The abbreviated URL at the left of each Transfer Bar is green if the request was a Conditional Request, or Black if the request was unconditional. The full URL is shown in the status bar on hover. @@ -42,12 +54,8 @@ How is the diagram interpreted + The gray arrow icon indicates that the server's response was a redirect (302). The red ! icon indicates that the server returned an error code (4xx, 5xx). -What is streaming mode? ------------------------ +## What is streaming mode? Streaming mode ensures that HTTP responses are not buffered by Fiddler. Buffering alters the waterfall diagram, as you can see below, where none of the images begin to download until their containing page completes. Learn more... -![Buffering Mode vs. Streaming Mode][2] - -[1]: ../images/Timeline/TransferTimeline.png -[2]: ../images/Timeline/BufferingMode.png +![Buffering Mode vs. Streaming Mode](./images/BufferingMode.png) \ No newline at end of file diff --git a/knowledge-base/uiguide.md b/knowledge-base/uiguide.md index 8e1380d..fd3dc3e 100644 --- a/knowledge-base/uiguide.md +++ b/knowledge-base/uiguide.md @@ -6,16 +6,26 @@ position: 3 res_type: kb --- -User Interface Guide -==================== +## Environment -Overview --------- + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
-![UI Overview](../images/UIGuide/UIOverview.png) +## User Interface Guide -The Web Sessions List ---------------------- +![UI Overview](./images/UIOverview.png) + +## The Web Sessions List The Web Sessions list contains the list of HTTP Requests that are sent by your computer. You can resize and reorder the columns in this list for your convenience. You can also sort this list by clicking on the column header. @@ -30,7 +40,7 @@ Certain key information is available in this list, including: + Caching - Values from the Response's Expires or Cache-Control headers + Process - The local Windows Process from which the traffic originated + Content-Type - The Content-Type header from the Response -+ Custom - A text field you can set [via scripting]({%slug AddColumns%}). ++ Custom - A text field you can set [via scripting](slug://AddColumns). + Comments - A text field you can set from scripting or the session's context menu In Fiddler Classic v2.2.0.5 and later, you can add new columns of your choice. @@ -39,43 +49,42 @@ The default text coloring of the Session entries derives from the HTTP Status (r Each session is marked with an icon for quick reference: -+ ![Request Being Sent](../images/UIGuide/RequestBeingSent.png) Request is being sent to the server -+ ![Response Being Read](../images/UIGuide/RequestBeingRead.png) Response is being read from the server -+ ![Request Paused](../images/UIGuide/RequestPaused.png) Request is paused at a breakpoint -+ ![Response Paused](../images/UIGuide/ResponsePaused.png) Response is paused at a breakpoint -+ ![Request Used HEAD](../images/UIGuide/RequestUsedHEAD.png) Request used HTTP HEAD method; response should have no body -+ ![Request Used POST](../images/UIGuide/RequestUsedPost.png) Request used HTTP POST method -+ ![Request Used CONNECT](../images/UIGuide/RequestUsedCONNECT.png) Request used HTTP CONNECT method; this establishes a tunnel used for [HTTPS traffic]({%slug DecryptHTTPS%}) -+ ![HTML](../images/UIGuide/HTML.png) Response was HTML -+ ![Image](../images/UIGuide/Image.png) Response was an image -+ ![Script](../images/UIGuide/Script.PNG) Response was a script -+ ![CSS](../images/UIGuide/CSS.png) Response was Cascading Style Sheet -+ ![XML](../images/UIGuide/XML.png) Response was XML -+ ![JSON](../images/UIGuide/JSON.png) Response was JSON -+ ![Audio](../images/UIGuide/Audio.png) Response was an audio file -+ ![Video](../images/UIGuide/Video.png) Response was a video file -+ ![Silverlight](../images/UIGuide/Silverlight.png) Response was a Silverlight applet -+ ![Flash](../images/UIGuide/Flash.png) Response was a Flash applet -+ ![Font](../images/UIGuide/Font.png) Response was a font -+ ![Successful](../images/UIGuide/Successful.png) Generic successful response -+ ![Redirect](../images/UIGuide/300.png) Response was HTTP/300,301,302,303 or 307 redirect -+ ![Use Cached](../images/UIGuide/304.png) Response was HTTP/304: Use cached version -+ ![Request Client Credentials](../images/UIGuide/RequestClientCredentials.png) Response was a request for client credentials -+ ![Server Error](../images/UIGuide/ServerError.png) Response was a server error -+ ![Session Aborted](../images/UIGuide/SessionAborted.png) Session was aborted by the client, Fiddler, or the Server. - -Interacting with Sessions -------------------------- ++ ![Request Being Sent](./images/RequestBeingSent.png) Request is being sent to the server ++ ![Response Being Read](./images/RequestBeingRead.png) Response is being read from the server ++ ![Request Paused](./images/RequestPaused.png) Request is paused at a breakpoint ++ ![Response Paused](./images/ResponsePaused.png) Response is paused at a breakpoint ++ ![Request Used HEAD](./images/RequestUsedHEAD.png) Request used HTTP HEAD method; response should have no body ++ ![Request Used POST](./images/RequestUsedPost.png) Request used HTTP POST method ++ ![Request Used CONNECT](./images/RequestUsedCONNECT.png) Request used HTTP CONNECT method; this establishes a tunnel used for [HTTPS traffic](slug://DecryptHTTPS) ++ ![HTML](./images/HTML.png) Response was HTML ++ ![Image](./images/Image.png) Response was an image ++ ![Script](./images/Script.PNG) Response was a script ++ ![CSS](./images/CSS.png) Response was Cascading Style Sheet ++ ![XML](./images/XML.png) Response was XML ++ ![JSON](./images/JSON.png) Response was JSON ++ ![Audio](./images/Audio.png) Response was an audio file ++ ![Video](./images/Video.png) Response was a video file ++ ![Silverlight](./images/Silverlight.png) Response was a Silverlight applet ++ ![Flash](./images/Flash.png) Response was a Flash applet ++ ![Font](./images/Font.png) Response was a font ++ ![Successful](./images/Successful.png) Generic successful response ++ ![Redirect](./images/300.png) Response was HTTP/300,301,302,303 or 307 redirect ++ ![Use Cached](./images/304.png) Response was HTTP/304: Use cached version ++ ![Request Client Credentials](./images/RequestClientCredentials.png) Response was a request for client credentials ++ ![Server Error](./images/ServerError.png) Response was a server error ++ ![Session Aborted](./images/SessionAborted.png) Session was aborted by the client, Fiddler, or the Server. + +## Interacting with Sessions If you right-click one or more sessions, a context-menu appears: -![Context Menu](../images/UIGuide/ContextMenu.png) +![Context Menu](./images/ContextMenu.png) -Tip: You can add to this menu using the [ContextAction feature of FiddlerScript]({%slug PerfTesting%}). +Tip: You can add to this menu using the [ContextAction feature of FiddlerScript](slug://PerfTesting). On the **Copy** menu: -![Copy Menu](../images/UIGuide/CopyMenu.png) +![Copy Menu](./images/CopyMenu.png) + Session - Copy the raw session(s) to the clipboard in plaintext and colorized HTML format + Just URL - Copy the hostname + URL path @@ -85,7 +94,7 @@ On the **Copy** menu: On the **Save** menu: -![Save Menu](../images/UIGuide/SaveMenu.png) +![Save Menu](./images/SaveMenu.png) + **Session > In ArchiveZIP** - Creates a .SAZ archive containing all selected requests & responses, plus an index page. + **Session** - Create a text file containing the request followed by the response @@ -95,36 +104,28 @@ On the **Save** menu: + **Full Response** - Create a text file containing the response headers and response body + **Response Body** - Create a file contain the body of the response (often HTML or an image) -AutoResponder -------------- +## AutoResponder The [AutoResponder tab][34] allows you to return locally stored content instead of forwarding requests to the server. Learn more... -Inspectors ----------- +## Inspectors The Inspectors tab allows you to view the contents of each request and response, in a variety of different formats. You can develop custom Inspectors using .NET. -Filters -------- +## Filters The Filters tab enables you to quickly filter out traffic that is not of interest. -Timeline --------- +## Timeline The Timeline Tab shows the transfer timeline of selected HTTP Sessions. -QuickExec ---------- +## QuickExec The QuickExec box below the session list allows you to execute commands and search your traffic. Learn more... -![QuickExec Box](../images/UIGuide/QuickExec.png) - -Request Composer ----------------- - -The [Request Composer]({%slug CreateNewRequest%}) allows you to craft custom requests to send to the server. You can either create a new request manually, or you can drag and drop a session from the Web Sessions list to create a new request based on the existing request. Learn more... +![QuickExec Box](./images/QuickExec.png) +## Request Composer +The [Request Composer](slug://CreateNewRequest) allows you to craft custom requests to send to the server. You can either create a new request manually, or you can drag and drop a session from the Web Sessions list to create a new request based on the existing request. Learn more... \ No newline at end of file diff --git a/knowledge-base/varyresponseheader.md b/knowledge-base/varyresponseheader.md index 7d4e35f..7ba9510 100644 --- a/knowledge-base/varyresponseheader.md +++ b/knowledge-base/varyresponseheader.md @@ -7,8 +7,22 @@ position: 7 res_type: kb --- -About the Vary Response Header -============================== +## Environment + + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
+ +## About the Vary Response Header As described in the HTTP/1.1 specification (RFC2616), the Vary response header allows a cache to determine if a cached (still fresh) response may be returned for a subsequent request, based on whether or not the new request's headers match those that were sent when the the previously response was originally cached. @@ -19,22 +33,19 @@ As described in the HTTP/1.1 specification (RFC2616), the Vary response header a field value advises the user agent about the criteria that were used to select the representation. -The Problem ------------ +## The Problem Unfortunately, the WinINET caching engine (below Internet Explorer and other applications) does not cache outbound request headers. This limitation makes it impossible for WinINET to perform the request-header matching algorithm. Hence, Internet Explorer is conservative and generally will refuse to return a cached Vary response for a new request, except under special circumstances, as detailed below. -Internet Explorer 6 -------------------- +## Internet Explorer 6 Internet Explorer 6 will treat a response with a Vary header as completely uncacheable, unless the Vary header contains only the token User-Agent. Hence, a subsequent request will be made unconditionally, resulting in a full re-delivery of the unchanged response. This results in a significant performance problem when Internet Explorer 6 encounters Vary headers. Note: IE6 will ignore the Vary header entirely if the response was delivered with HTTP Compression; the header is dropped when URLMon decompresses the cache file on WinINET's behalf. -Internet Explorer 7 -------------------- +## Internet Explorer 7 For Internet Explorer 7, the problem was not eliminated, but its impact was mitigated in some common cases. @@ -46,8 +57,7 @@ Even though revalidation of cache response will require one round trip to server Note, WinINET will remove the Vary: Accept-Encoding header if it decompressed the response. Therefore, you should only send a Vary: Accept-Encoding header when you have compressed the content (e.g. Content-Encoding: gzip). -Best Practices --------------- +## Best Practices Never send Vary: Host. All responses implicitly vary by hostname, because the hostname is a part of the URI, and all requests vary by URI. Only send a Vary: Accept-Encoding header when you have compressed the content (e.g. Content-Encoding: gzip). diff --git a/knowledge-base/vpat.md b/knowledge-base/vpat.md index 1e01030..2b886a2 100644 --- a/knowledge-base/vpat.md +++ b/knowledge-base/vpat.md @@ -6,44 +6,48 @@ publish: true res_type: kb --- +## Environment + + + + + + + + + + + + +
Product Version5.0.20253
ProductProgress® Telerik® Fiddler Classic
-### Date: -9/15/2012 - -### Name of Product: -Fiddler Classic Web Debugger - -### Contact for more Information: -[https://www.telerik.com/fiddler](https://www.telerik.com/fiddler) - -# Summary ## Voluntary Product Accessibility Template -### Section 1194.21 Software Applications and Operating Systems +#### Section 1194.21 Software Applications and Operating Systems Please refer to the attached VPAT -### Section 1194.22 Web-based Internet Information and Applications +#### Section 1194.22 Web-based Internet Information and Applications Not Applicable - Fiddler Classic is not considered a web-based internet information application -### Section 1194.23 Telecommunications Products +#### Section 1194.23 Telecommunications Products Not Applicable - Fiddler Classic is not considered a telecommunications product -### Section 1194.24 Video and Multi-media Products +#### Section 1194.24 Video and Multi-media Products Not Applicable - Fiddler Classic is not considered a video or multi-media product -### Section 1194.25 Self-Contained, Closed Products +#### Section 1194.25 Self-Contained, Closed Products Not Applicable - Fiddler Classic is not considered a self-contained, closed product -### Section 1194.26 Desktop and Portable Computers +#### Section 1194.26 Desktop and Portable Computers Not Applicable - Fiddler Classic is not considered a desktop or portable computer -### Section 1194.31 Functional Performance Criteria +#### Section 1194.31 Functional Performance Criteria Please refer to the attached VPAT -### Section 1194.41 Information, Documentation, and Support +#### Section 1194.41 Information, Documentation, and Support Please refer to the attached VPAT -# Section 1194.21 Software Applications and Operating Systems - Detail +## Section 1194.21 Software Applications and Operating Systems - Detail ## Voluntary Product Accessibility Template ### (a) When software is designed to run on a system that has a keyboard, product functions shall be executable from a keyboard where the function itself or the result of performing a function can be discerned textually. @@ -118,7 +122,7 @@ Not Applicable * Fiddler Classic does not use electronic forms. -# Section 1194.22 Web-based Internet Information and Applications - Detail +### Section 1194.22 Web-based Internet Information and Applications - Detail ## Voluntary Product Accessibility Template ### (a) A text equivalent for every non-text element shall be provided (e.g., via "alt", "longdesc", or in element content). @@ -169,7 +173,7 @@ Not Applicable ### (p) When a timed response is required, the user shall be alerted and given sufficient time to indicate more time is required. Not Applicable -# Section 1194.23 Telecommunications Products - Detail +### Section 1194.23 Telecommunications Products - Detail ## Voluntary Product Accessibility Template ### (a) Telecommunications products or systems which provide a function allowing voice communication and which do not themselves provide a TTY functionality shall provide a standard non-acoustic connection point for TTYs. Microphones shall be capable of being turned on and off to allow the user to intermix speech with TTY use. @@ -214,7 +218,7 @@ Not Applicable ### (k)(4) Products which have mechanically operated controls or keys shall comply with the following: The status of all locking or toggle controls or keys shall be visually discernible, and discernible either through touch or sound. Not Applicable -# Section 1194.24 Video and Multimedia Products +## Section 1194.24 Video and Multimedia Products ## Voluntary Product Accessibility Template ### (a) All analog television displays 13 inches and larger, and computer equipment that includes analog television receiver or display circuitry, shall be equipped with caption decoder circuitry which appropriately receives, decodes, and displays closed captions from broadcast, cable, videotape, and DVD signals. As soon as practicable, but not later than July 1, 2002, widescreen digital television (DTV) displays measuring at least 7.8 inches vertically, DTV sets with conventional displays measuring at least 13 inches vertically, and stand-alone DTV tuners, whether or not they are marketed with display screens, and computer equipment that includes DTV receiver or display circuitry, shall be equipped with caption decoder circuitry which appropriately receives, decodes, and displays closed captions from broadcast, cable, videotape, and DVD signals. @@ -241,7 +245,7 @@ Does Not Support ### (e) Display or presentation of alternate text presentation or audio descriptions shall be user-selectable unless permanent. Not Applicable -# Section 1194.25 Self-Contained, Closed Products - Detail +## Section 1194.25 Self-Contained, Closed Products - Detail ## Voluntary Product Accessibility Template ### (a) Self contained products shall be usable by people with disabilities without requiring an end-user to attach Assistive Technology to the product. Personal headsets for private listening are not Assistive Technology. @@ -283,7 +287,7 @@ Not Applicable ### (j)(4) Products which are freestanding, non-portable, and intended to be used in one location and which have operable controls shall comply with the following: Operable controls shall not be more than 24 inches behind the reference plane. Not Applicable -# Section 1194.26 Desktop and Portable Computers - Detail +## Section 1194.26 Desktop and Portable Computers - Detail ## Voluntary Product Accessibility Template ### (a) All mechanically operated controls and keys shall comply with §1194.23 (k) (1) through (4). @@ -298,7 +302,7 @@ Not Applicable ### (d) Where provided, at least one of each type of expansion slots, ports and connectors shall comply with publicly available industry standards Not Applicable -# Section 1194.31 Functional Performance Criteria - Detail +## Section 1194.31 Functional Performance Criteria - Detail ## Voluntary Product Accessibility Template ### (a) At least one mode of operation and information retrieval that does not require user vision shall be provided, or support for Assistive Technology used by people who are blind or visually impaired shall be provided. @@ -344,13 +348,13 @@ Exceptions * Fiddler’s support for voice recognition and alternative input devices can be limited as reason stated in section 1194.21 (a) -# Section 1194.41 Information, Documentation, and Support - Detail +## Section 1194.41 Information, Documentation, and Support - Detail ## Voluntary Product Accessibility Template -### Section 1194.41 (a) Product Support Documentation provided to end-users shall be made available in alternate formats upon request, at no additional charge. +#### Section 1194.41 (a) Product Support Documentation provided to end-users shall be made available in alternate formats upon request, at no additional charge. Supported - [http://www.fiddler2.com/fiddler/help/](http://www.fiddler2.com/fiddler/help/) -### Section 1194.41 (b) End-users shall have access to a description of the accessibility and compatibility features of products in alternate formats or alternate methods upon request, at no additional charge. +#### Section 1194.41 (b) End-users shall have access to a description of the accessibility and compatibility features of products in alternate formats or alternate methods upon request, at no additional charge. Supports with Exceptions - [http://www.fiddler2.com/fiddler/help/keyboard.asp](http://www.fiddler2.com/fiddler/help/keyboard.asp) provides keyboard reference ### 1194.41 (c) Support services for products shall accommodate the communication needs of end-users with disabilities. diff --git a/modify-traffic/continuerequestheaders.md b/modify-traffic/continuerequestheaders.md new file mode 100644 index 0000000..ad1c9a2 --- /dev/null +++ b/modify-traffic/continuerequestheaders.md @@ -0,0 +1,28 @@ +--- +title: Reduce delays from Expect header +description: Reduce delays from 'Expect 100-continue headers' +slug: ContinueRequestHeaders +publish: true +position: 3 +previous_url: /modify-traffic/tasks/continuerequestheaders +--- + +# Reduce Delays from Expect: 100-continue headers + +To have Fiddler Classic return the 100-Continue header for a request: + +1. Click **Rules > Customize Rules...**. +2. Add the following function inside the **Handlers** class: +```c# +static function OnPeekAtRequestHeaders(oSession: Session) { + if (oSession.HTTPMethodIs("POST") && oSession.oRequest.headers.ExistsAndContains("Expect", "continue")) + { + if (null != oSession.oRequest.pipeClient) + { + oSession["ui-backcolor"] = "lightyellow"; + oSession.oRequest.headers.Remove("Expect"); + oSession.oRequest.pipeClient.Send(System.Text.Encoding.ASCII.GetBytes("HTTP/1.1 100 Continue\r\nServer: Fiddler\r\n\r\n")); + } + } +} +``` diff --git a/modify-traffic/tasks/customizerequest.md b/modify-traffic/customizerequest.md similarity index 70% rename from modify-traffic/tasks/customizerequest.md rename to modify-traffic/customizerequest.md index 61affd6..5a92f3a 100644 --- a/modify-traffic/tasks/customizerequest.md +++ b/modify-traffic/customizerequest.md @@ -4,51 +4,55 @@ description: Options in FIddler Classic for customizing a request slug: CustomizeRequest publish: true position: 1 +previous_url: /modify-traffic/tasks/customizerequest --- -Customize a Request -=================== +# Customize a Request The Composer allows you to craft custom requests to send to a server. You can either create a new request manually, or you can drag and drop a session from the Web Sessions list to create a new request based on the existing request. -Modes ------ +## Modes There are two modes for the Composer. In Parsed mode, you can use the boxes to build up a HTTP(S) request. In Raw mode, you must type in a properly formatted HTTP request yourself. Generally, using Parsed Mode is what you want. -Options -------- +## Options The Options tab exposes options that allow you to customize the behavior of the Composer. + **Inspect Session** selects the new session and activates the Inspectors tab when the request is issued. + **Fix Content-Length Header** adjusts the value of the Content-Length request header (if present) to match the size of the request body. -+ **Follow Redirects** causes a HTTP/3xx redirect to trigger a new request, if possible. The Composer will follow up to fiddler.composer.followredirects.max default redirections. ++ **Follow Redirects** causes a HTTP/3xx redirect to trigger a new request, if possible. The Composer will follow up to `fiddler.composer.followredirects.max` default redirections. + **Automatically Authenticate** causes Fiddler Classic to automatically respond to HTTP/401 and HTTP/407 challenges that use NTLM or Negotiate protocols using the current user's Windows credentials. -Tips and Tricks ---------------- +## Tips and Tricks 1. Use drag-and-drop from the Session List to create a new request based on a previously-captured request. 2. Use a # character in the RequestURL to be prompted for a series of sequentially-numbered URLs to download. If you enter a leading 0 (zero) before the "Start At" value, then all numbers will be padded with leading zeros (if necessary) to get to that width. -For instance, if you have the URL http://www.example.com/#/?a=#, and enter the Start At value as 08 and the End At value as 11, the Composer will request the following URLs: +For instance, if you have the URL `http://www.example.com/#/?a=#`, and enter the Start At value as 08 and the End At value as 11, the Composer will request the following URLs: - http://www.example.com/08/?a=08 - http://www.example.com/09/?a=09 - http://www.example.com/10/?a=10 - http://www.example.com/11/?a=11 +```txt +http://www.example.com/08/?a=08 +http://www.example.com/09/?a=09 +http://www.example.com/10/?a=10 +http://www.example.com/11/?a=11 +``` 3. **Shift+Click** the Execute button to immediately break the new request for further editing using Fiddler's Inspectors 4. Add a dummy header **Fiddler-Encoding: base64** and encode your body using base64 if it contains any binary data. Fiddler Classic will decode the data before transmitting it to the server. -5. Add a dummy header **Fiddler-Host: targettesthost** if you would like Fiddler Classic to send your request to the specified server (http://targettesthost, in this case) while retaining the URL and host header specified elsewhere in the request. This is a convenience method that setS the X-OverrideHost, X-IgnoreCertCNMismatch and X-OverrideGateway flags on the new Session, removing the dummy header before contacting the specified server. +5. Add a dummy header **Fiddler-Host: targettesthost** if you would like Fiddler Classic to send your request to the specified server (`http://targettesthost`, in this case) while retaining the URL and host header specified elsewhere in the request. This is a convenience method that setS the X-OverrideHost, X-IgnoreCertCNMismatch and X-OverrideGateway flags on the new Session, removing the dummy header before contacting the specified server. 6. Click the **Upload File** link to have the composer inject one or more local files into the request body as it is sent to the server. If you would like the uploaded file to be sent as base64 (as you might in an XML post body) insert the token base64 into the string. For instance: - <@INCLUDE base64 *C:\Users\lawrence\Desktop\test.bin*@> +```XML + + <@INCLUDE base64 *C:\Users\lawrence\Desktop\test.bin*@> + + +``` diff --git a/images/CookieScanning/PrivacyInfo.png b/modify-traffic/images/PrivacyInfo.png similarity index 100% rename from images/CookieScanning/PrivacyInfo.png rename to modify-traffic/images/PrivacyInfo.png diff --git a/images/CookieScanning/PrivacyMenu.png b/modify-traffic/images/PrivacyMenu.png similarity index 100% rename from images/CookieScanning/PrivacyMenu.png rename to modify-traffic/images/PrivacyMenu.png diff --git a/modify-traffic/tasks/modifyrequest.md b/modify-traffic/modifyrequest.md similarity index 69% rename from modify-traffic/tasks/modifyrequest.md rename to modify-traffic/modifyrequest.md index 97e41db..b8fe1d5 100644 --- a/modify-traffic/tasks/modifyrequest.md +++ b/modify-traffic/modifyrequest.md @@ -4,11 +4,10 @@ description: "Modify HTTP requests on the fly in Fiddler Classic - edit headers, slug: ModifyRequest publish: true position: 2 +previous_url: /modify-traffic/tasks/modifyrequest --- -Modify a Request -================ +# Modify a Request -Modify requests and responses by [customizing Fiddler's rules with FiddlerScript][1]. +Modify requests and responses by [customizing Fiddler's rules with FiddlerScript](slug://ModifyRequestOrResponse). -[1]: ../../KnowledgeBase/FiddlerScript/ModifyRequestOrResponse diff --git a/modify-traffic/tasks/renameinvalidp3p.md b/modify-traffic/renameinvalidp3p.md similarity index 79% rename from modify-traffic/tasks/renameinvalidp3p.md rename to modify-traffic/renameinvalidp3p.md index a18a6f3..db683a0 100644 --- a/modify-traffic/tasks/renameinvalidp3p.md +++ b/modify-traffic/renameinvalidp3p.md @@ -4,24 +4,23 @@ description: "lern how to modify invalid P3P headers through the privacy scanner slug: RenameInvalidP3P publish: true position: 4 +previous_url: /modify-traffic/tasks/renameinvalidp3p --- -Rename Invalid P3P Headers -========================== +# Rename Invalid P3P Headers 1. Install the [Privacy Scanner Fiddler Classic add-on](https://www.telerik.com/fiddler/add-ons). Fiddler Classic will gain a new top-level menu named **Privacy**. - ![Privacy menu](../../images/CookieScanning/PrivacyMenu.png) + ![Privacy menu](./images/PrivacyMenu.png) 2. Ensure **Privacy > Enabled** and **Privacy > Rename P3P header if invalid** are checked. Now, if a session presents a P3P statement that is malformed, that P3P header will be renamed to **Malformed-P3P** to prevent the browser from interpreting it as the P3P 1.0 specification suggested (for example, ignoring the unknown tokens). -See Also --------- +## See Also + [Cookie Test Page](http://www.enhanceie.com/test/cookie/) -+ [View Cookie Information]({%slug CookieScanning%}) ++ [View Cookie Information](slug://CookieScanning) diff --git a/modify-traffic/tasks/continuerequestheaders.md b/modify-traffic/tasks/continuerequestheaders.md deleted file mode 100644 index 7f3c291..0000000 --- a/modify-traffic/tasks/continuerequestheaders.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Reduce delays from Expect header -description: Reduce delays from 'Expect 100-continue headers' -slug: ContinueRequestHeaders -publish: true -position: 3 ---- - -Reduce Delays from Expect: 100-continue headers -=============================================== - -To have Fiddler Classic return the 100-Continue header for a request: - -1. Click **Rules > Customize Rules...**. - -2. Add the following function inside the **Handlers** class: - - static function OnPeekAtRequestHeaders(oSession: Session) { - if (oSession.HTTPMethodIs("POST") && oSession.oRequest.headers.ExistsAndContains("Expect", "continue")) - { - if (null != oSession.oRequest.pipeClient) - { - oSession["ui-backcolor"] = "lightyellow"; - oSession.oRequest.headers.Remove("Expect"); - oSession.oRequest.pipeClient.Send(System.Text.Encoding.ASCII.GetBytes("HTTP/1.1 100 Continue\r\nServer: Fiddler\r\n\r\n")); - } - } - } diff --git a/observe-traffic/tasks/capturewebtraffic.md b/observe-traffic/capturewebtraffic.md similarity index 63% rename from observe-traffic/tasks/capturewebtraffic.md rename to observe-traffic/capturewebtraffic.md index d92fe1e..dcf6c62 100644 --- a/observe-traffic/tasks/capturewebtraffic.md +++ b/observe-traffic/capturewebtraffic.md @@ -4,17 +4,14 @@ description: Learn how to start capturing web traffic with Fiddler Classic. slug: ViewWebTraffic publish: true position: 1 +previous_url: /observe-traffic/tasks/capturewebtraffic --- -Capture Web Traffic -================ +# Capture Web Traffic 1. In Fiddler, click the **File** menu. - 2. Ensure **Capture Traffic** is enabled. - - ![Capture Traffic](../../images/CaptureWebTraffic/CaptureTraffic.png) + ![Capture Traffic](./images/CaptureTraffic.png) Captured web traffic sessions appear in the **Sessions List**. - - ![Sessions List](../../images/CaptureWebTraffic/SessionsList.png) \ No newline at end of file + ![Sessions List](./images/SessionsList.png) \ No newline at end of file diff --git a/observe-traffic/tasks/comparetraffic.md b/observe-traffic/comparetraffic.md similarity index 54% rename from observe-traffic/tasks/comparetraffic.md rename to observe-traffic/comparetraffic.md index 1693ba3..070a853 100644 --- a/observe-traffic/tasks/comparetraffic.md +++ b/observe-traffic/comparetraffic.md @@ -4,62 +4,44 @@ description: "Use Fiddler Classic to compare traffic sessions - steps for side-b slug: CompareTraffic publish: true position: 11 +previous_url: /observe-traffic/tasks/comparetraffic --- -Compare Web Traffic -=================== +# Compare Web Traffic -Compare two web sessions ------------------------- +## Compare two web sessions 1. Select two sessions in the **Web Sessions List**. 2. Right-click one of the sessions. 3. Click **Compare** from the context menu. - By default, this will attempt to launch **WinDiff** or **WinMerge** to compare the traffic. **Tips:** -+ If you're using WinDiff, you can cause it to break each line on punctuation by holding ALT or SHIFT while clicking on the **Compare** menu item. -+ You can set the **fiddler.differ.ultradiff** [preference][5] to **False** if you don't want Fiddler Classic to attempt to reorganize the headers and URL for simpler diffing when saving the files. +* If you're using WinDiff, you can cause it to break each line on punctuation by holding ALT or SHIFT while clicking on the **Compare** menu item. +*You can set the **fiddler.differ.ultradiff** [preference][5] to **False** if you don't want Fiddler Classic to attempt to reorganize the headers and URL for simpler diffing when saving the files. -Change default text comparison tool ------------------------------------ +## Change default text comparison tool 1. Click **Tools > Options > Tools**. 2. Enter the location for the tool executable. -Set custom command-line arguments ---------------------------------- - -In the [QuickExec box][3]: +## Set custom command-line arguments +In the [QuickExec box](slug://QuickExec): 1. Provide the path to the tool: - + ``` PREFS SET fiddler.config.path.differ "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe" - + ``` 2. Configure the command line to match what the tool expects: - + ``` PREFS SET fiddler.differ.Params "/diff \"{0}\" \"{1}\"" - + ``` 3. (Optional) Set an alternate command line that will be invoked if you hold ALT or SHIFT while invoking the comparison: - + ``` PREFS SET fiddler.differ.ParamsAlt "/diff /binary \"{0}\" \"{1}\"" + ``` -Compare multiple sessions at once ---------------------------------- - -The [Traffic Differ Extension][4] allows you to compare multiple sessions at a time. - - -See Also --------- - -+ [Download WinMerge][1] -+ [Install Windiff][2] +## Compare multiple sessions at once -[1]: http://winmerge.org/ -[2]: http://support.microsoft.com/kb/159214 -[3]: ../../KnowledgeBase/QuickExec -[4]: http://fiddler2.com/add-ons -[5]: ../../KnowledgeBase/FiddlerScript/FiddlerPrefs +The [Traffic Differ Extension](https://www.telerik.com/fiddler/add-ons) allows you to compare multiple sessions at a time. diff --git a/observe-traffic/configurecolumns.md b/observe-traffic/configurecolumns.md new file mode 100644 index 0000000..59711c4 --- /dev/null +++ b/observe-traffic/configurecolumns.md @@ -0,0 +1,36 @@ +--- +title: Configure Columns +slug: ConfigureColumns +publish: true +position: 9 +previous_url: /observe-traffic/tasks/configurecolumns +--- + +# Configure Columns + +## Rearrange Columns + +* To reorder the columns, drag a column header to the left or the right. + ![Reorder Columns](./images/ReorderColumns.png) +* To resize a column, drag the edge of a column header. + ![Resize Columns](./images/ResizeColumns.png) + +## Add Custom Columns + +Use on of these methods: + +* Use the **Customize Columns** menu. + 1. Right-click the top of a column and select **Customize Columns...**. + ![Column Header Context Menu](./images/ColumnsContextMenu.png) + 2. Click the **Collection** drop-down menu and select the collection that will populate the column. + ![Customize Columns Window](./images/CollectionDropDown.png) + 3. Enter the name of the collection member that will populate the column and the title of the column. +* **Use QuickExec to add a temporary column** + ```txt + cols add [Title] FlagName + ``` + ![QuickExec Command][./images/QuickExecCommand.png] +Columns added using QuickExec will be removed the next time Fiddler Classic starts. For more QuickExec column commands, see the [QuickExec Reference](slug://QuickExec). +* [Customize rules with FiddlerScript](slug://AddColumns) +* **Call the AddBoundColumn method from an IFiddlerExtension** + Call the **AddBoundColumn** method from an [IFiddlerExtension], passing a **getColumnStringDelegate** as the third parameter. \ No newline at end of file diff --git a/observe-traffic/datauri.md b/observe-traffic/datauri.md new file mode 100644 index 0000000..8ae53ed --- /dev/null +++ b/observe-traffic/datauri.md @@ -0,0 +1,19 @@ +--- +title: Inspect DataURI Object +description: "Convert sessions to Data URI format in Fiddler Classic - embed HTTP response content as inline URIs for sharing and testing." +slug: DataURI +publish: true +position: 15 +previous_url: /observe-traffic/tasks/datauri +--- + +# Inspect DataURI Object + +To inspect a DataURI object: + +1. Copy a [DataURI](https://en.wikipedia.org/wiki/Data_URI_scheme) to your clipboard from Fiddler Classic or any other source. + ![Copy DataURI](./images/CopyDataURI.png) +2. Click **Edit > Paste Files as Sessions**. Fiddler Classic will parse the DataURI and create a new Session for it in the **Web Sessions List**. + ![Paste Files as Sessions](./images/PasteFiles.png) +3. [Use Fiddler Classic inspectors](slug://ViewSessionContent) to examine the resulting object. + ![Inspect Object](./images/InspectObject.png) diff --git a/observe-traffic/tasks/examinewebtraffic.md b/observe-traffic/examinewebtraffic.md similarity index 62% rename from observe-traffic/tasks/examinewebtraffic.md rename to observe-traffic/examinewebtraffic.md index 65bbb4c..5c59c1e 100644 --- a/observe-traffic/tasks/examinewebtraffic.md +++ b/observe-traffic/examinewebtraffic.md @@ -4,47 +4,37 @@ description: "learno how to inspect the web traffic" slug: ExamineWebTraffic publish: true position: 2 +previous_url: /observe-traffic/tasks/examinewebtraffic --- -Examine Web Traffic -=================== +# Examine Web Traffic -View Web Session Summary ------------------------- -To view the Fiddler Classic ID Number, result code, protocol, hostname, content type, URL, body size, caching value, origin process, custom comments, and any custom columns for a web session: +## View Web Session Summary -1. [Capture web traffic]({%slug ViewWebTraffic%}). +To view the Fiddler Classic ID Number, result code, protocol, hostname, content type, URL, body size, caching value, origin process, custom comments, and any custom columns for a web session: +1. [Capture web traffic](slug://ViewWebTraffic). 2. Find the web session in the **Web Sessions List**. + ![Web Session List](./images/SessionsList.png) - ![Web Session List](../../images/ExamineWebTraffic/SessionsList.png) +## View Web Session Statistics -View Web Session Statistics ---------------------------- To view performance statistics for a web sesion: 1. Click on a web session in the **Web Sessions List**. - 2. Click the **Statistics** tab. + ![Statistics Tab](./images/Statistics.png) - ![Statistics Tab](../../images/ExamineWebTraffic/Statistics.png) +## View Web Session Content -View Web Session Content ------------------------- To view the content of a web session in a variety of formats: - 1. Click on a web session in the **Web Sessions List**. - 2. Click the **Inspectors** tab. + ![Inspectors Tab](./images/Inspectors.png) - ![Inspectors Tab](../../images/ExamineWebTraffic/Inspectors.png) +## Visualize Sessions Transfer Timeline -Visualize Sessions Transfer Timeline ---------------------------- To view a waterfall diagram of the transfer timeline for one or more web sessions: - 1. Select one or more web sessions in the **Web Sessions List**. Hold down the CTRL key and click sessions in the **Web Sessions List** to select more than one session. - 2. Click the **Timeline** tab. - - ![Timeline Tab](../../images/ExamineWebTraffic/Timeline.png) + ![Timeline Tab](./images/Timeline.png) diff --git a/observe-traffic/tasks/gettraces.md b/observe-traffic/gettraces.md similarity index 94% rename from observe-traffic/tasks/gettraces.md rename to observe-traffic/gettraces.md index 34c814f..f3b4bab 100644 --- a/observe-traffic/tasks/gettraces.md +++ b/observe-traffic/gettraces.md @@ -3,13 +3,13 @@ title: Get Fiddler traces from your users slug: GetTraces publish: true position: 7 +previous_url: /observe-traffic/tasks/gettraces --- ## Try the Cross-Platform Fiddler Everywhere Amplify your debugging efforts with a Web Debugging Proxy for any device or platform. [Fiddler Everywhere](https://www.telerik.com/fiddler/fiddler-everywhere) is a pathway for all, supporting macOS, Linux and Windows. - ## Try the Fiddler Everywhere Reporter [Fiddler Everywhere Reporter](https://www.telerik.com/fiddler/fiddler-everywhere-reporter) is a free, cross-platform desktop tool for easily capturing web traffic logs and quickly sharing them with tech teams for troubleshooting. diff --git a/observe-traffic/ie9requestheader.md b/observe-traffic/ie9requestheader.md new file mode 100644 index 0000000..4e96f26 --- /dev/null +++ b/observe-traffic/ie9requestheader.md @@ -0,0 +1,29 @@ +--- +title: Find why IE9 made a web request +slug: IE9RequestHeader +publish: true +position: 8 +previous_url: /observe-traffic/tasks/ie9requestheader +--- + +# Find why IE9 made a web request + +## Add Accept header and Download Initiator columns to **Web Sessions List** + +1. Enable the Feature Control Key. + ```bash + FEATURE_DOWNLOAD_INITIATOR_HTTP_HEADER + ``` + +2. Enter these commands in the QuickExec box: + ```bash + cols add @request.Accept + cols add @request.X-Download-Initiator + ``` +3. Click **Rules > Customize Rules**. + +4. Scroll to the static function Main() block , and add the following line within: + ```bash + FiddlerObject.UI.lvSessions.AddBoundColumn("Accept", 50, "@request.Accept"); + FiddlerObject.UI.lvSessions.AddBoundColumn("Reason", 50, "@request.X-Download-Initiator"); + ``` diff --git a/images/CaptureWebTraffic/CaptureTraffic.png b/observe-traffic/images/CaptureTraffic.png similarity index 100% rename from images/CaptureWebTraffic/CaptureTraffic.png rename to observe-traffic/images/CaptureTraffic.png diff --git a/images/ConfigureColumns/CollectionDropDown.png b/observe-traffic/images/CollectionDropDown.png similarity index 100% rename from images/ConfigureColumns/CollectionDropDown.png rename to observe-traffic/images/CollectionDropDown.png diff --git a/images/ConfigureColumns/ColumnsContextMenu.png b/observe-traffic/images/ColumnsContextMenu.png similarity index 100% rename from images/ConfigureColumns/ColumnsContextMenu.png rename to observe-traffic/images/ColumnsContextMenu.png diff --git a/images/DataURI/CopyDataURI.png b/observe-traffic/images/CopyDataURI.png similarity index 100% rename from images/DataURI/CopyDataURI.png rename to observe-traffic/images/CopyDataURI.png diff --git a/images/ConfigureColumns/CustomizeColumnsMenu.png b/observe-traffic/images/CustomizeColumnsMenu.png similarity index 100% rename from images/ConfigureColumns/CustomizeColumnsMenu.png rename to observe-traffic/images/CustomizeColumnsMenu.png diff --git a/images/SearchSessions/FindSessions.png b/observe-traffic/images/FindSessions.png similarity index 100% rename from images/SearchSessions/FindSessions.png rename to observe-traffic/images/FindSessions.png diff --git a/images/DataURI/InspectObject.png b/observe-traffic/images/InspectObject.png similarity index 100% rename from images/DataURI/InspectObject.png rename to observe-traffic/images/InspectObject.png diff --git a/images/ExamineWebTraffic/Inspectors.png b/observe-traffic/images/Inspectors.png similarity index 100% rename from images/ExamineWebTraffic/Inspectors.png rename to observe-traffic/images/Inspectors.png diff --git a/images/DataURI/PasteFiles.png b/observe-traffic/images/PasteFiles.png similarity index 100% rename from images/DataURI/PasteFiles.png rename to observe-traffic/images/PasteFiles.png diff --git a/observe-traffic/images/PrivacyInfo.png b/observe-traffic/images/PrivacyInfo.png new file mode 100644 index 0000000..3643a6b Binary files /dev/null and b/observe-traffic/images/PrivacyInfo.png differ diff --git a/observe-traffic/images/PrivacyMenu.png b/observe-traffic/images/PrivacyMenu.png new file mode 100644 index 0000000..c43bad9 Binary files /dev/null and b/observe-traffic/images/PrivacyMenu.png differ diff --git a/images/ConfigureColumns/QuickExecCommand.png b/observe-traffic/images/QuickExecCommand.png similarity index 100% rename from images/ConfigureColumns/QuickExecCommand.png rename to observe-traffic/images/QuickExecCommand.png diff --git a/images/ConfigureColumns/ReorderColumns.png b/observe-traffic/images/ReorderColumns.png similarity index 100% rename from images/ConfigureColumns/ReorderColumns.png rename to observe-traffic/images/ReorderColumns.png diff --git a/images/ConfigureColumns/ResizeColumns.png b/observe-traffic/images/ResizeColumns.png similarity index 100% rename from images/ConfigureColumns/ResizeColumns.png rename to observe-traffic/images/ResizeColumns.png diff --git a/images/SBFilter.png b/observe-traffic/images/SBFilter.png similarity index 100% rename from images/SBFilter.png rename to observe-traffic/images/SBFilter.png diff --git a/images/CaptureWebTraffic/SessionsList.png b/observe-traffic/images/SessionsList.png similarity index 100% rename from images/CaptureWebTraffic/SessionsList.png rename to observe-traffic/images/SessionsList.png diff --git a/images/ExamineWebTraffic/Statistics.png b/observe-traffic/images/Statistics.png similarity index 100% rename from images/ExamineWebTraffic/Statistics.png rename to observe-traffic/images/Statistics.png diff --git a/images/SpecificTrafficMissing/TBFilter.png b/observe-traffic/images/TBFilter.png similarity index 100% rename from images/SpecificTrafficMissing/TBFilter.png rename to observe-traffic/images/TBFilter.png diff --git a/images/ExamineWebTraffic/Timeline.png b/observe-traffic/images/Timeline.png similarity index 100% rename from images/ExamineWebTraffic/Timeline.png rename to observe-traffic/images/Timeline.png diff --git a/images/filterstab.png b/observe-traffic/images/filterstab.png similarity index 100% rename from images/filterstab.png rename to observe-traffic/images/filterstab.png diff --git a/observe-traffic/parentchild.md b/observe-traffic/parentchild.md new file mode 100644 index 0000000..69da6d0 --- /dev/null +++ b/observe-traffic/parentchild.md @@ -0,0 +1,17 @@ +--- +title: Select Parent or Child Session +slug: ParentChild +publish: true +position: 8 +previous_url: /observe-traffic/tasks/parentchild +--- + +# Select Parent or Child Session + +To select the parent session (the most recent request to the URL specified in the selected session's Referer header): + +1. Select a session in the **Web Sessions List**. +1. Press **P**. + * To select all child sessions (the later requests to the URL specified in the selected session's Referer header) + 1. Select a session in the **Web Sessions List**. + 1. Press **C**. diff --git a/observe-traffic/scancookies.md b/observe-traffic/scancookies.md new file mode 100644 index 0000000..f9ab766 --- /dev/null +++ b/observe-traffic/scancookies.md @@ -0,0 +1,24 @@ +--- +title: View Cookie Information +slug: CookieScanning +publish: true +position: 10 +previous_url: /observe-traffic/tasks/scancookies +--- + +# View Cookie Information + +1. Install the [Privacy Scanner Fiddler Classic add-on](https://www.telerik.com/fiddler/add-ons). Fiddler Classic will gain a new top-level menu named **Privacy**. + ![Privacy menu](./images/PrivacyMenu.png) +2. Ensure **Privacy > Enabled** is checked. The add-on will add a **Privacy Info** column to the session list and will flag HTTP/HTTPS responses which set cookies. Evaluation of any P3P statements that come along with those cookies will change the session's background color: + ![Privacy Info Column](./images/PrivacyInfo.png) + + + **Green** sessions send a satisfactory P3P policy. + + **Yellow** sessions set a cookie without a P3P policy. + + **Orange** sessions send a P3P policy that [does not permit use of the cookie in a 3rd party context](https://msdn.microsoft.com/en-us/library/ie/ms537343(v=vs.85).aspx#unsatisfactory_cookies). + + **Red** sessions send invalid P3P policies. + +## See Also + ++ [Rename Invalid P3P Headers](slug://RenameInvalidP3P) + diff --git a/observe-traffic/tasks/searchsessions.md b/observe-traffic/searchsessions.md similarity index 63% rename from observe-traffic/tasks/searchsessions.md rename to observe-traffic/searchsessions.md index b4d5fb6..b80f686 100644 --- a/observe-traffic/tasks/searchsessions.md +++ b/observe-traffic/searchsessions.md @@ -4,18 +4,13 @@ description: "Search sessions in Fiddler Classic - use filters, regex, or column slug: SearchSessions publish: true position: 6 +previous_url: /observe-traffic/tasks/searchsessions --- -Search and Filter Sessions -========================== +# Search and Filter Sessions To search through captured requests and responses: + Click **Edit > Find Sessions...** and specify search options in the dialog. - - ![Find Sessions][1] - -+ Enter a [command][2] in the QuickExec box. - -[1]: ../../images/SearchSessions/FindSessions.png -[2]: ../../KnowledgeBase/QuickExec + ![Find Sessions](./images/FindSessions.png) ++ Enter a [command](slug://QuickExec) in the QuickExec box. diff --git a/observe-traffic/troubleshooting/specifictrafficmissing.md b/observe-traffic/specifictrafficmissing.md similarity index 68% rename from observe-traffic/troubleshooting/specifictrafficmissing.md rename to observe-traffic/specifictrafficmissing.md index 95879f8..3322117 100644 --- a/observe-traffic/troubleshooting/specifictrafficmissing.md +++ b/observe-traffic/specifictrafficmissing.md @@ -4,32 +4,29 @@ description: "Learn how to resolve missing traffic in Fiddler Classic by checkin slug: SpecificTrafficMissing publish: true position: 3 +previous_url: /observe-traffic/tasks/specifictrafficmissing --- -Problem: Specific Traffic is Missing ------------------------------------- +# Problem: Specific Traffic is Missing I see some traffic in the Web Sessions List, but some traffic (for example, from a specific program) seems to be missing. -Solution: Check for Traffic Filters ------------------------------------ +## Solution: Check for Traffic Filters Check to see if any Traffic Filters are enabled. + Check in the **status bar** - ![SBFilter](../../images/SBFilter.png) + ![SBFilter](./images/SBFilter.png) + Check the **Process Filter** in the toolbar. -![TBFilter](../../images/TBFilter.png) +![TBFilter](./images/TBFilter.png) + Check the **Filters tab**. -![FiltersTab](../../images/filterstab.png) +![FiltersTab](./images/filterstab.png) -+ If you've written or set any [Fiddler Classic Rules][1] check those too. ++ If you've written or set any [Fiddler Classic Rules](slug://AddRules) check those too. + Click **Help > Troubleshoot Filters...**. When you do so, traffic that would otherwise be hidden is instead shown in a strikethrough font. The **Comments** column will show which of Fiddler's filters was responsible for attempting to hide the traffic. - -[1]: ../../Extend-Fiddler/AddRules diff --git a/observe-traffic/tasks/configurecolumns.md b/observe-traffic/tasks/configurecolumns.md deleted file mode 100644 index 6881593..0000000 --- a/observe-traffic/tasks/configurecolumns.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Configure Columns -slug: ConfigureColumns -publish: true -position: 9 ---- - -Configure Columns -================= - -Rearrange Columns ------------------ - -+ To reorder the columns, drag a column header to the left or the right. - - ![Reorder Columns][1] - -+ To resize a column, drag the edge of a column header. - - ![Resize Columns][2] - -Add Custom Columns ------------------- - -Use on of these methods: - -+ Use the **Customize Columns** menu. - - 1. Right-click the top of a column and select **Customize Columns...**. - - ![Column Header Context Menu][6] - - 2. Click the **Collection** drop-down menu and select the collection that will populate the column. - - ![Customize Columns Window][7] - - 3. Enter the name of the collection member that will populate the column and the title of the column. - -+ **Use QuickExec to add a temporary column** - - - Type this command in the QuickExec box: - - cols add [Title] FlagName - - ![QuickExec Command][3] - - Columns added using QuickExec will be removed the next time Fiddler Classic starts. For more QuickExec column commands, see the [QuickExec Reference][4]. - -+ [Customize rules with FiddlerScript][5] - - -+ **Call the AddBoundColumn method from an IFiddlerExtension** - - - Call the **AddBoundColumn** method from an [IFiddlerExtension], passing a **getColumnStringDelegate** as the third parameter. - -[1]: ../../images/ConfigureColumns/ReorderColumns.png -[2]: ../../images/ConfigureColumns/ResizeColumns.png -[3]: ../../images/ConfigureColumns/QuickExecCommand.png -[4]: ../../KnowledgeBase/QuickExec -[5]: ../../KnowledgeBase/FiddlerScript/AddColumns -[6]: ../../images/ConfigureColumns/ColumnsContextMenu.png -[7]: ../../images/ConfigureColumns/CollectionDropDown.png diff --git a/observe-traffic/tasks/datauri.md b/observe-traffic/tasks/datauri.md deleted file mode 100644 index 0d329e5..0000000 --- a/observe-traffic/tasks/datauri.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Inspect DataURI Object -description: "Convert sessions to Data URI format in Fiddler Classic - embed HTTP response content as inline URIs for sharing and testing." -slug: DataURI -publish: true -position: 15 ---- - -Inspect DataURI Object -====================== - -To inspect a DataURI object: - -1. Copy a [DataURI][1] to your clipboard from Fiddler Classic or any other source. - - ![Copy DataURI][2] - -2. Click **Edit > Paste Files as Sessions**]. - - ![Paste Files as Sessions][3] - - Fiddler Classic will parse the DataURI and create a new Session for it in the **Web Sessions List**. - -3. [Use Fiddler Classic inspectors][4] to examine the resulting object. - - ![Inspect Object][5] - -[1]: https://en.wikipedia.org/wiki/Data_URI_scheme -[2]: ../../images/DataURI/CopyDataURI.png -[3]: ../../images/DataURI/PasteFiles.png -[4]: ./ViewSessionContent -[5]: ../../images/DataURI/InspectObject.png \ No newline at end of file diff --git a/observe-traffic/tasks/ie9requestheader.md b/observe-traffic/tasks/ie9requestheader.md deleted file mode 100644 index 631bb8a..0000000 --- a/observe-traffic/tasks/ie9requestheader.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Find why IE9 made a web request -slug: IE9RequestHeader -publish: true -position: 8 ---- - -Find why IE9 made a web request -=============================== - -Add Accept header and Download Initiator columns to **Web Sessions List** -------------------------------------------------------------------------- - -1. Enable the - - FEATURE_DOWNLOAD_INITIATOR_HTTP_HEADER - - Feature Control Key. - -2. Enter these commands in the QuickExec box: - - cols add @request.Accept - cols add @request.X-Download-Initiator - - ![QuickExec Command][1] - -3. Click **Rules > Customize Rules**. - -4. Scroll to the static function Main() block , and add the following line within: - - FiddlerObject.UI.lvSessions.AddBoundColumn("Accept", 50, "@request.Accept"); - FiddlerObject.UI.lvSessions.AddBoundColumn("Reason", 50, "@request.X-Download-Initiator"); - -See also --------- - -+ [Introduction to Feature Controls][9] - -[1]: ../../images/IE9RequestHeader/QuickExecCommand.png -[9]: https://msdn.microsoft.com/en-us/library/ms537184(v=vs.85).aspx diff --git a/observe-traffic/tasks/parentchild.md b/observe-traffic/tasks/parentchild.md deleted file mode 100644 index 22ccf37..0000000 --- a/observe-traffic/tasks/parentchild.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Select Parent or Child Session -slug: ParentChild -publish: true -position: 8 ---- - -Select Parent or Child Session -============================== - -+ To select the parent session (the most recent request to the URL specified in the selected session's Referer header): - -1. Select a session in the **Web Sessions List**. - -2. Press **P**. - -+ To select all child sessions (the later requests to the URL specified in the selected session's Referer header): - -1. Select a session in the **Web Sessions List**. - -2. Press **C**. diff --git a/observe-traffic/tasks/scancookies.md b/observe-traffic/tasks/scancookies.md deleted file mode 100644 index c250442..0000000 --- a/observe-traffic/tasks/scancookies.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: View Cookie Information -slug: CookieScanning -publish: true -position: 10 ---- - -View Cookie Information -======================= - -1. Install the [Privacy Scanner Fiddler Classic add-on](https://www.telerik.com/fiddler/add-ons). - - Fiddler Classic will gain a new top-level menu named **Privacy**. - - ![Privacy menu](../../images/CookieScanning/PrivacyMenu.png) - -2. Ensure **Privacy > Enabled** is checked. - - The add-on will add a **Privacy Info** column to the session list and will flag HTTP/HTTPS responses which set cookies. - -Evaluation of any P3P statements that come along with those cookies will change the session's background color: - - ![Privacy Info Column](../../images/CookieScanning/PrivacyInfo.png) - -+ **Green** sessions send a satisfactory P3P policy. -+ **Yellow** sessions set a cookie without a P3P policy. -+ **Orange** sessions send a P3P policy that [does not permit use of the cookie in a 3rd party context](https://msdn.microsoft.com/en-us/library/ie/ms537343(v=vs.85).aspx#unsatisfactory_cookies). -+ **Red** sessions send invalid P3P policies. - -See Also --------- - -+ [Rename Invalid P3P Headers]({%slug RenameInvalidP3P%}) - diff --git a/observe-traffic/troubleshooting/_meta.yml b/observe-traffic/troubleshooting/_meta.yml new file mode 100644 index 0000000..e12948b --- /dev/null +++ b/observe-traffic/troubleshooting/_meta.yml @@ -0,0 +1,2 @@ +title: Troubleshooting +position: 300 \ No newline at end of file diff --git a/observe-traffic/troubleshooting/alltrafficmissing.md b/observe-traffic/troubleshooting/alltrafficmissing.md index 41baad6..3a7db04 100644 --- a/observe-traffic/troubleshooting/alltrafficmissing.md +++ b/observe-traffic/troubleshooting/alltrafficmissing.md @@ -5,25 +5,16 @@ publish: true position: 1 --- -Problem: No sessions appear in the Web Sessions List. ------------------------------------------------------ +# Problem: No sessions appear in the Web Sessions List. -Solution: Review your Fiddler Classic Configuration -------------------------------------------- +## Solution: Review your Fiddler Classic Configuration -+ Review the [Configuring Clients][1] section. ++ Review the [Configuring Clients](slug://ConfigureFiddler) section. -+ If appropriate, review the [Configure Browser][2] or [Configure .NET app][3] pages. ++ If appropriate, review the [Configure Browser](slug://ViewWebTraffic) or [Configure .NET app](slug://DotNETConfig) pages. -+ If appropriate, review the [Monitoring traffic to localhost][5] page. ++ If appropriate, review the [Monitoring traffic to localhost](slug://MonitorDialupAndVPN) page. -+ Ensure traffic is not blocked by one or more [filters][6]. ++ Ensure traffic is not blocked by one or more [filters](slug://MonitorLocalTraffic). -+ If appropriate, review the [Monitor Dialup or VPN connection][4] page. - -[1]: ../../Configure-Fiddler/Tasks/ConfigureFiddler -[2]: ../../Configure-Fiddler/Tasks/ConfigureBrowsers -[3]: ../../Configure-Fiddler/Tasks/ConfigureDotNETApp -[4]: ../../Configure-Fiddler/Tasks/MonitorDialupAndVPN -[5]: ../../Configure-Fiddler/Tasks/MonitorLocalTraffic -[6]: ../../KnowledgeBase/Filters ++ If appropriate, review the [Monitor Dialup or VPN connection](slug://MonitorDialupAndVPN) page. \ No newline at end of file diff --git a/observe-traffic/troubleshooting/incompleteresponses.md b/observe-traffic/troubleshooting/incompleteresponses.md index b6cfd47..959deee 100644 --- a/observe-traffic/troubleshooting/incompleteresponses.md +++ b/observe-traffic/troubleshooting/incompleteresponses.md @@ -6,13 +6,11 @@ publish: true position: 6 --- -Problem -------- +# Problem Fiddler Classic captures incomplete HTTP Responses -Solution --------- +## Solution Ensure "Use HTTP1.1 through proxy servers" is checked on IE's **Tools > Internet Options > Advanced** tab, or similar settings in your browser of choice. diff --git a/observe-traffic/troubleshooting/nohttpstraffic.md b/observe-traffic/troubleshooting/nohttpstraffic.md index deb33d2..950aef8 100644 --- a/observe-traffic/troubleshooting/nohttpstraffic.md +++ b/observe-traffic/troubleshooting/nohttpstraffic.md @@ -6,12 +6,10 @@ publish: true position: 4 --- -Problem -------- +# Problem I don't see any HTTPS traffic-- I only see a "CONNECT" tunnel. -Solution --------- +## Solution HTTPS Traffic decryption is disabled by default. Learn more about [decrypting HTTPS traffic with Fiddler2.](../../Configure-Fiddler/Tasks/DecryptHTTPS) diff --git a/observe-traffic/troubleshooting/notraffictolocalhost.md b/observe-traffic/troubleshooting/notraffictolocalhost.md index ba3a445..13e709e 100644 --- a/observe-traffic/troubleshooting/notraffictolocalhost.md +++ b/observe-traffic/troubleshooting/notraffictolocalhost.md @@ -6,8 +6,7 @@ publish: true position: 2 --- -Problem: Traffic sent to http://localhost or http://127.0.0.1 is not captured ------------------------------------------------------------------------------ +# Problem: Traffic sent to localhost or 127.0.0.1 is not captured Internet Explorer and the .NET Framework are hardcoded not to send requests for Localhost through any proxies, and as a proxy, Fiddler Classic will not receive such traffic. @@ -15,38 +14,36 @@ Internet Explorer and the .NET Framework are hardcoded not to send requests for + You should never encounter the "Localhost traffic not captured" problem with Firefox. The FiddlerHook add-on for Firefox removes "localhost" from the "bypass proxy" list when Fiddler Classic is in "Capturing" mode. -Solution 1: Use Machine Name or Hostname ----------------------------------------- +## Solution 1: Use Machine Name or Hostname The simplest workaround is to use your machine name as the hostname instead of **Localhost** or **127.0.0.1**. For example, rather than hitting: - http://localhost:8081/mytestpage.aspx +```sh +http://localhost:8081/mytestpage.aspx +``` Instead visit: - http://machinename:8081/mytestpage.aspx. +```sh +http://machinename:8081/mytestpage.aspx +``` -Solution 2: Use http://ipv4.fiddler ------------------------------------ +## Solution 2: Use http://ipv4.fiddler -Use **http://ipv4.fiddler** to hit localhost on the IPv4 adapter. This works especially well with the Visual Studio test webserver (codename: Cassini) because the test server only listens on the IPv4 loopback adapter. Use **http://ipv6.fiddler** to hit localhost on the IPv6 adapter, or use **http://localhost.fiddler** to hit localhost using "localhost" in the Host header. This last option should work best with IIS Express. +Use `http://ipv4.fiddler` to hit localhost on the IPv4 adapter. This works especially well with the Visual Studio test webserver (codename: Cassini) because the test server only listens on the IPv4 loopback adapter. Use `http://ipv6.fiddler` to hit localhost on the IPv6 adapter, or use `http://localhost.fiddler` to hit localhost using `localhost` in the Host header. This last option should work best with IIS Express. -Solution 3: Updated Rules File ------------------------------- +## Solution 3: Updated Rules File 1. Update your Rules file as follows: - static function OnBeforeRequest(oSession:Fiddler.Session){ - if (oSession.HostnameIs("MYAPP")) { oSession.host = "127.0.0.1:8081"; } - } +```c# +static function OnBeforeRequest(oSession:Fiddler.Session){ + if (oSession.HostnameIs("MYAPP")) { oSession.host = "127.0.0.1:8081"; } +} +``` -2. Make requests for http://myapp, which will act as an alias for 127.0.0.1:8081. +2. Make requests for `http://myapp`, which will act as an alias for `127.0.0.1:8081`. +## See Also - -See Also --------- - -+ [Monitor Traffic to Localhost][1] - -[1]: ../../Configure-Fiddler/Tasks/MonitorLocalTraffic ++ [Monitor Traffic to Localhost](slug://MonitorLocalTraffic) \ No newline at end of file diff --git a/observe-traffic/troubleshooting/underlyingconnectionclosed.md b/observe-traffic/troubleshooting/underlyingconnectionclosed.md index 229e25e..0f9e228 100644 --- a/observe-traffic/troubleshooting/underlyingconnectionclosed.md +++ b/observe-traffic/troubleshooting/underlyingconnectionclosed.md @@ -6,16 +6,14 @@ publish: true position: 5 --- -Problem -------- +# Problem I get a System.NET.WebException "The underlying connection was closed" when calling into WebServices. -Solution --------- +## Solution When debugging a .Net application through Fiddler, you may see a System.Net.WebException, with message *"The underlying connection was closed: A connection that was expected to be kept alive was closed by the server."* This is a bug in your application (it should handle this type of exception). -Note: This problem is very unlikely in Fiddler Classic 2.2.8.5 and later, due to enhanced client connection reuse support. +>tip This problem is very unlikely in Fiddler Classic 2.2.8.5 and later, due to enhanced client connection reuse support. diff --git a/observe-traffic/tasks/viewsessioncontent.md b/observe-traffic/viewsessioncontent.md similarity index 56% rename from observe-traffic/tasks/viewsessioncontent.md rename to observe-traffic/viewsessioncontent.md index 5a70393..3debce1 100644 --- a/observe-traffic/tasks/viewsessioncontent.md +++ b/observe-traffic/viewsessioncontent.md @@ -3,17 +3,14 @@ title: View Web Session Content slug: ViewSessionContent publish: true position: 4 +previous_url: /observe-traffic/tasks/viewsessioncontent --- -View Web Session Content -======================== +# View Web Session Content To view the content of a web session in a variety of formats: 1. Click on a web session in the **Web Sessions List**. - - ![Web Session List](../../images/ViewSessionContent/SessionsList.png) - + ![Web Session List](./images/SessionsList.png) 2. Click the **Inspectors** tab. - - ![Inspectors Tab](../../images/ViewSessionContent/Inspectors.png) + ![Inspectors Tab](./images/Inspectors.png) diff --git a/observe-traffic/tasks/viewsessionstatistics.md b/observe-traffic/viewsessionstatistics.md similarity index 63% rename from observe-traffic/tasks/viewsessionstatistics.md rename to observe-traffic/viewsessionstatistics.md index 7e43697..e5814d8 100644 --- a/observe-traffic/tasks/viewsessionstatistics.md +++ b/observe-traffic/viewsessionstatistics.md @@ -4,19 +4,14 @@ description: "View session statistics in Fiddler Classic - analyze count, size, slug: ViewSessionStatistics publish: true position: 3 +previous_url: /observe-traffic/tasks/viewsessionstatistics --- -View Web Session Statistics -=========================== +# View Web Session Statistics + To view performance statistics for a web sesion: 1. Click on a web session in the **Web Sessions List**. - - ![Web Session List][1] - + ![Web Session List](./images/SessionsList.png) 2. Click the **Statistics** tab. - - ![Statistics Tab][2] - -[1]: ../../images/ViewSessionStatistics/SessionsList.png -[2]: ../../images/ViewSessionStatistics/Statistics.png \ No newline at end of file + ![Statistics Tab](./images/Statistics.png) \ No newline at end of file diff --git a/observe-traffic/tasks/viewsessionstimeline.md b/observe-traffic/viewsessionstimeline.md similarity index 67% rename from observe-traffic/tasks/viewsessionstimeline.md rename to observe-traffic/viewsessionstimeline.md index dc90358..a6cf717 100644 --- a/observe-traffic/tasks/viewsessionstimeline.md +++ b/observe-traffic/viewsessionstimeline.md @@ -4,23 +4,13 @@ description: "Use the sessions timeline in Fiddler Classic for traffic analysis slug: ViewSessionsTimeline publish: true position: 5 +previous_url: /observe-traffic/tasks/viewsessionstimeline --- -Visualize Sessions Transfer Timeline -==================================== +# Visualize Sessions Transfer Timeline To view a waterfall diagram of the transfer timeline for one or more web sessions: 1. Select one or more web sessions in the **Web Sessions List**. Hold down the **CTRL** key and click to select more than one session. - 2. Click the **Timeline** tab. - - ![Timeline Tab][1] - -See Also --------- - -+ [Timeline View KB Article][2] - -[1]: ../../images/ExamineWebTraffic/Timeline.png -[2]: ../../KnowledgeBase/Timeline + ![Timeline Tab](./images/Timeline.png) \ No newline at end of file diff --git a/observe-traffic/tasks/viewsessionsummary.md b/observe-traffic/viewsessionsummary.md similarity index 64% rename from observe-traffic/tasks/viewsessionsummary.md rename to observe-traffic/viewsessionsummary.md index ae978ce..c102b76 100644 --- a/observe-traffic/tasks/viewsessionsummary.md +++ b/observe-traffic/viewsessionsummary.md @@ -3,17 +3,14 @@ title: View Web Session Summary slug: ViewSessionSummary publish: true position: 2 +previous_url: /observe-traffic/tasks/viewsessionsummary --- -View Web Session Summary -======================== +# View Web Session Summary + To view the Fiddler Classic ID Number, result code, protocol, hostname, content type, URL, body size, caching value, origin process, custom comments, and any custom columns for a web session: -1. [Capture web traffic][1]. +1. [Capture web traffic](slug://ConfigureBrowsers). 2. Find the web session in the **Web Sessions List**. - - ![Web Session List][2] - -[1]: ./CaptureWebTraffic -[2]: ../../images/ViewSessionSummary/SessionsList.png \ No newline at end of file + ![Web Session List](./images/SessionsList.png) \ No newline at end of file diff --git a/save-and-load-traffic/createsaz.md b/save-and-load-traffic/createsaz.md new file mode 100644 index 0000000..255fee2 --- /dev/null +++ b/save-and-load-traffic/createsaz.md @@ -0,0 +1,17 @@ +--- +title: Create a Session Archive Zip (SAZ) Traffic Archive +slug: CreateSAZ +publish: true +position: 1 +previous_url: /save-and-load-traffic/tasks/createsaz +--- + +# Create a Session Archive Zip (SAZ) Traffic archive + +1. Start Fiddler. + +2. Use your client or browser to generate some HTTP/HTTPS traffic. + +3. Click **File > Save > All Sessions...** + +4. Save the traffic to a **.SAZ** file. \ No newline at end of file diff --git a/images/ImportExport/AdjustAppCacheManifest.png b/save-and-load-traffic/images/AdjustAppCacheManifest.png similarity index 100% rename from images/ImportExport/AdjustAppCacheManifest.png rename to save-and-load-traffic/images/AdjustAppCacheManifest.png diff --git a/images/ImportExport/BaseURL.png b/save-and-load-traffic/images/BaseURL.png similarity index 100% rename from images/ImportExport/BaseURL.png rename to save-and-load-traffic/images/BaseURL.png diff --git a/images/ImportExport/SelectExportFormat.png b/save-and-load-traffic/images/SelectExportFormat.png similarity index 100% rename from images/ImportExport/SelectExportFormat.png rename to save-and-load-traffic/images/SelectExportFormat.png diff --git a/images/ImportExport/SelectImportFormat.png b/save-and-load-traffic/images/SelectImportFormat.png similarity index 100% rename from images/ImportExport/SelectImportFormat.png rename to save-and-load-traffic/images/SelectImportFormat.png diff --git a/save-and-load-traffic/tasks/importexportdefault.md b/save-and-load-traffic/importexportdefault.md similarity index 67% rename from save-and-load-traffic/tasks/importexportdefault.md rename to save-and-load-traffic/importexportdefault.md index f67af49..15c043e 100644 --- a/save-and-load-traffic/tasks/importexportdefault.md +++ b/save-and-load-traffic/importexportdefault.md @@ -3,10 +3,10 @@ title: Import and Export Traffic slug: ImportExport publish: true position: 3 +previous_url: /save-and-load-traffic/tasks/importexportdefault --- -Export to Default Formats -========================= +# Export to Default Formats To export traffic to **WCAT Script**, **VS Web Test Script**, [**Meddler Script**](http://www.webdbg.com/meddler/), **HTML5 AppCache Manifest**, **HTTP Archive Format 1.1**, **HTTP Archive Format 1.2** ), or a **Raw File Dump**: @@ -17,22 +17,21 @@ To export traffic to **WCAT Script**, **VS Web Test Script**, [**Meddler Script* 3. Select the export format from the drop-down menu. - ![Select Export Format](../../images/ImportExport/SelectExportFormat.png) + ![Select Export Format](./images/SelectExportFormat.png) 4. Click **Next** to select the export file location. 5. If exporting to **HTML5 AppCache Manifest**: Check any resources you wish to exclude from the CACHE section of the Manifest. These will be added to the NETWORK section of the Manifest. - ![Adjust AppCache Manifest](../../images/ImportExport/AdjustAppCacheManifest.png) + ![Adjust AppCache Manifest](./images/AdjustAppCacheManifest.png) 6. To specify a **Base URL** and convert the URLs to be relative to this URL, type this URL in the **Base URL:** field. - ![Base URL](../../images/ImportExport/BaseURL.png) + ![Base URL](./images/BaseURL.png) 7. Click **Save**. The AppCache Manifest appears in a text editor. -Import to Default Formats -------------------------- +## Import to Default Formats To import traffic from **HTTP Archive JSON**, **HTTP Archive XML** (exported from [IE9 Developer Tools Network Tab][12]), or **Test Studio Load Test**: @@ -40,11 +39,10 @@ To import traffic from **HTTP Archive JSON**, **HTTP Archive XML** (exported fro 2. Select the import format from the drop-down menu. - ![Select Import Format][../../images/ImportExport/SelectImportFormat.png -] + ![Select Import Format][./images/SelectImportFormat.png] 3. Click **Next**. -Create Custom Importers and Exporters ------------------------------------------- -[Create Custom Importers and Exporters]({%slug BuildImporterExporter%}) with Fiddler Classic Extensions. +## Create Custom Importers and Exporters + +[Create Custom Importers and Exporters](slug://BuildImporterExporter) with Fiddler Classic Extensions. diff --git a/save-and-load-traffic/logtolocaldb.md b/save-and-load-traffic/logtolocaldb.md new file mode 100644 index 0000000..b999c6d --- /dev/null +++ b/save-and-load-traffic/logtolocaldb.md @@ -0,0 +1,58 @@ +--- +title: Log Sessions to Local Database +slug: LogToLocalDB +publish: true +position: 4 +previous_url: /save-and-load-traffic/tasks/logtolocaldb +--- + +# Log Sessions to Local Database + + +1. [Add Rules to Fiddler](slug://AddRules) to create a new menu item as follows: +```c# + +// Log the currently selected sessions in the list to a database. +// Note: The DB must already exist and you must have permissions to write to it. +public static ToolsAction("Log Selected Sessions") +function DoLogSessions(oSessions: Fiddler.Session[]){ +if (null == oSessions || oSessions.Length < 1){ + MessageBox.Show("Please select some sessions first!"); + return; +} +var strMDB = "C:\\log.mdb"; +var cnn = null; +var sdr = null; +var cmd = null; + +try +{ + cnn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strMDB); + cnn.Open(); + cmd = new OleDbCommand(); + cmd.Connection = cnn; + + for (var x = 0; x < oSessions.Length; x++){ + var strSQL = "INSERT into tblSessions ([ResponseCode],[URL]) Values (" + + oSessions[x].responseCode + ", '" + oSessions[x].url + "')"; + cmd.CommandText = strSQL; + cmd.ExecuteNonQuery(); + } +} +catch (ex){ + MessageBox.Show(ex); +} +finally +{ + if (cnn != null ){ + cnn.Close(); + } +} +} +``` + +2. List the new import at the top of your rules script as follows: + +```c# +import System.Data.OleDb; +``` \ No newline at end of file diff --git a/save-and-load-traffic/tasks/createsaz.md b/save-and-load-traffic/tasks/createsaz.md deleted file mode 100644 index 9754639..0000000 --- a/save-and-load-traffic/tasks/createsaz.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Create a Session Archive Zip (SAZ) Traffic Archive -slug: CreateSAZ -publish: true -position: 1 ---- - -Create a Session Archive Zip (SAZ) Traffic archive -================================================== - -1. Start Fiddler. - -2. Use your client or browser to [generate some HTTP/HTTPS traffic][1]. - -3. Click **File > Save > All Sessions...** - -4. Save the traffic to a **.SAZ** file. - -See Also --------- - -+ [Import and Export Traffic][2] - -[1]: ../../observe-traffic/tasks/capturewebtraffic -[2]: ./ImportExportDefault \ No newline at end of file diff --git a/save-and-load-traffic/tasks/logtolocaldb.md b/save-and-load-traffic/tasks/logtolocaldb.md deleted file mode 100644 index e4a5dab..0000000 --- a/save-and-load-traffic/tasks/logtolocaldb.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Log Sessions to Local Database -slug: LogToLocalDB -publish: true -position: 4 ---- - -Log Sessions to Local Database -============================== - -1. [Add Rules to Fiddler][1] to create a new menu item as follows: - - // Log the currently selected sessions in the list to a database. - // Note: The DB must already exist and you must have permissions to write to it. - public static ToolsAction("Log Selected Sessions") - function DoLogSessions(oSessions: Fiddler.Session[]){ - if (null == oSessions || oSessions.Length < 1){ - MessageBox.Show("Please select some sessions first!"); - return; - } - var strMDB = "C:\\log.mdb"; - var cnn = null; - var sdr = null; - var cmd = null; - try - { - cnn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strMDB); - cnn.Open(); - cmd = new OleDbCommand(); - cmd.Connection = cnn; - - for (var x = 0; x < oSessions.Length; x++){ - var strSQL = "INSERT into tblSessions ([ResponseCode],[URL]) Values (" + - oSessions[x].responseCode + ", '" + oSessions[x].url + "')"; - cmd.CommandText = strSQL; - cmd.ExecuteNonQuery(); - } - } - catch (ex){ - MessageBox.Show(ex); - } - finally - { - if (cnn != null ){ - cnn.Close(); - } - } - } - -2. List the new import at the top of your rules script as follows: - - import System.Data.OleDb; - - -+ **Note**: This example relies upon OLEDB 4.0 which is not available for 64bit processes. Either: - - + Select another data provider (for example, SQLServer); or - + [Force Fiddler Classic to run in 32bit mode][2] - - -[1]: ../../Extend-Fiddler/AddRules -[2]: http://fiddler.wikidot.com/bitness diff --git a/save-and-load-traffic/tasks/vswebtest.md b/save-and-load-traffic/vswebtest.md similarity index 87% rename from save-and-load-traffic/tasks/vswebtest.md rename to save-and-load-traffic/vswebtest.md index 8b4af12..419197d 100644 --- a/save-and-load-traffic/tasks/vswebtest.md +++ b/save-and-load-traffic/vswebtest.md @@ -3,22 +3,20 @@ title: Capture traffic for Visual Studio WebTest playback slug: VSWebTest publish: true position: 2 +previous_url: /save-and-load-traffic/tasks/vswebtest --- -Visual Studio WebTest -===================== +# Visual Studio WebTest Fiddler2 includes the ability to capture web traffic (including AJAX requests) for later playback with the Visual Studio Web Test product. -Save a WebTest --------------- +## Save a WebTest 1. Capture traffic from your web application. 2. Click **File > Export Sessions > All Sessions**. 3. Click **Visual Studio WebTest.** -Replaying a WebTest -------------------- +## Replaying a WebTest + Note: You must have a Visual Studio 2005 or later Team System product installed to load the .WebTest file. @@ -29,13 +27,11 @@ To replay a WebTest: 3. Click the **Test** node. 4. Click **Test Project** in the template pane. -Troubleshooting Problems ------------------------- +## Troubleshooting Problems Please see [https://blogs.msdn.com/slumley/pages/how-to-debug-a-web-test.aspx](https://blogs.msdn.com/slumley/pages/how-to-debug-a-web-test.aspx) for information on how to troubleshoot problems with WebTests. -See Also --------- +## See Also + [https://blogs.msdn.com/slumley/pages/enhanced-web-test-support-in-fiddler.aspx](https://blogs.msdn.com/slumley/pages/enhanced-web-test-support-in-fiddler.aspx) + [https://blogs.msdn.com/edglas/archive/2007/06/13/fiddler-2-drop-available-at-www-fiddler2-com.aspx](https://blogs.msdn.com/edglas/archive/2007/06/13/fiddler-2-drop-available-at-www-fiddler2-com.aspx) diff --git a/troubleshoot-fiddler/bindtoportlocalhost8888.md b/troubleshoot-fiddler/bindtoportlocalhost8888.md index e1d6e71..d45df14 100644 --- a/troubleshoot-fiddler/bindtoportlocalhost8888.md +++ b/troubleshoot-fiddler/bindtoportlocalhost8888.md @@ -5,12 +5,11 @@ publish: true position: 80 --- - # Unable to bind to port Localhost:8888 Microsoft ISA Firewall client may cause Fiddler Classic to detach. When starting Fiddler Classic under nonadmin account (ordinary User) you may see an error message: -``` +```txt Unable to bind to port [Localhost: 8888]. This is usually due to another running copy of Fiddler Classic. (An attempt was made to access a socket in a way forbidden by its access permissions) ``` @@ -18,4 +17,4 @@ Unable to bind to port [Localhost: 8888]. This is usually due to another running **Fix:** - Close the Fiddler Classic application. - Open **REGEDIT** -- Add a new STRING under **HKCU\Software\Microsoft\Fiddler2** named **ExclusivePort** with value **False**. +- Add a new STRING under **HKCU\Software\Microsoft\Fiddler2** named **ExclusivePort** with value `False`. diff --git a/troubleshoot-fiddler/certerrors.md b/troubleshoot-fiddler/certerrors.md index c2eecbb..e0d5ae6 100644 --- a/troubleshoot-fiddler/certerrors.md +++ b/troubleshoot-fiddler/certerrors.md @@ -7,9 +7,6 @@ position: 20 # Certificate errors or .NET security exceptions while capturing traffic -Solution: ---------- +## Solution: -[Configure Fiddler Classic to Decrypt HTTPS][1] - -[1]: ../Configure-Fiddler/Tasks/DecryptHTTPS +[Configure Fiddler Classic to Decrypt HTTPS](slug://DecryptHTTPS) diff --git a/troubleshoot-fiddler/configurationsystemerror.md b/troubleshoot-fiddler/configurationsystemerror.md index b6ea3e3..712caea 100644 --- a/troubleshoot-fiddler/configurationsystemerror.md +++ b/troubleshoot-fiddler/configurationsystemerror.md @@ -9,7 +9,7 @@ position: 40 This folowing error message indicates that one of the .NET Framework's configuration files is corrupt. The most common fix for this is to trigger the Windows OS update and install all available .NET Framework updates. If that doesn't work, try re-installing the .NET Framework. If that doesn't work, try editing the file specified in the error message to correct whatever the error message is complaining about. -``` +```txt Sorry, you may have found a bug... Fiddler has encountered an unexpected problem. If you believe this is a bug in Fiddler, please copy this message by hitting CTRL+C, and submit a bug report using the Help | Send Feedback menu. @@ -23,6 +23,6 @@ System.Configuration.ConfigurationErrorsException: Unrecognized configuration se or -``` +```txt System.Configuration.ConfigurationErrorsException: Unrecognized configuration section runtime. (C:\Program Files (x86)\Fiddler2\Fiddler.exe.Config line 2) ``` diff --git a/troubleshoot-fiddler/crashonstartup.md b/troubleshoot-fiddler/crashonstartup.md index 2e6c8ef..8758a28 100644 --- a/troubleshoot-fiddler/crashonstartup.md +++ b/troubleshoot-fiddler/crashonstartup.md @@ -9,6 +9,6 @@ position: 50 If you see this message box when starting Fiddler: -![fiddlercrash](../images/fiddlercrash.png) +![fiddlercrash](./images/fiddlercrash.png) ...it generally means that your .NET Framework installation is corrupt. If you uninstall and reinstall the .NET 2.0 Framework, the problem is usually resolved. \ No newline at end of file diff --git a/images/fiddlercrash.png b/troubleshoot-fiddler/images/fiddlercrash.png similarity index 100% rename from images/fiddlercrash.png rename to troubleshoot-fiddler/images/fiddlercrash.png diff --git a/images/security-dialogs-reset.png b/troubleshoot-fiddler/images/security-dialogs-reset.png similarity index 100% rename from images/security-dialogs-reset.png rename to troubleshoot-fiddler/images/security-dialogs-reset.png diff --git a/images/security-dialogs.png b/troubleshoot-fiddler/images/security-dialogs.png similarity index 100% rename from images/security-dialogs.png rename to troubleshoot-fiddler/images/security-dialogs.png diff --git a/troubleshoot-fiddler/outofmemory.md b/troubleshoot-fiddler/outofmemory.md index 060ff69..622811b 100644 --- a/troubleshoot-fiddler/outofmemory.md +++ b/troubleshoot-fiddler/outofmemory.md @@ -10,7 +10,7 @@ position: 10 Sometimes, Fiddler Classic may show a dialog containing the following text: -``` +```txt Exception of type 'System.OutOfMemoryException' was thrown. at System.IO.MemoryStream.set_Capacity(Int32 value) at System.IO.MemoryStream.EnsureCapacity(Int32 value) diff --git a/troubleshoot-fiddler/security-warnings.md b/troubleshoot-fiddler/security-warnings.md index 3f87637..00db928 100644 --- a/troubleshoot-fiddler/security-warnings.md +++ b/troubleshoot-fiddler/security-warnings.md @@ -16,7 +16,7 @@ The Fiddler Classic application loads a list of add-ons and extensions on startu **Always Allow**: When chosen, the action is executed immediately. The consent dialog will not appear in the future. -![security dialogs in Fiddler Classic](../images/security-dialogs.png) +![security dialogs in Fiddler Classic](./images/security-dialogs.png) The consent dialogs in Fiddler Classic are triggered upon the following actions or user interactions: @@ -40,6 +40,6 @@ The consent dialogs in Fiddler Classic are triggered upon the following actions All consent dialogs in Fiddler Classic can be explicitly reset through the **Tools > Options > Extensions > Reset Allow Security Exceptions** -![Reset security dialogs in Fiddler Classic](../images/security-dialogs-reset.png) +![Reset security dialogs in Fiddler Classic](./images/security-dialogs-reset.png) diff --git a/troubleshoot-fiddler/tahomaerror.md b/troubleshoot-fiddler/tahomaerror.md index 35ea490..4bd40bd 100644 --- a/troubleshoot-fiddler/tahomaerror.md +++ b/troubleshoot-fiddler/tahomaerror.md @@ -9,7 +9,7 @@ position: 60 On some occasions, Fiddler Classic crashes on startup complaining about the Tahoma font with the following error message: -``` +```txt Sorry, you may have found a bug... Fiddler has encountered an unexpected problem. @@ -21,14 +21,14 @@ at System.Drawing.Font.CreateNativeFont() This can happen if you have the Microsoft Word 97 viewer installed. That tool sets the registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts\Tahoma (TrueType) to tahoma.FOT. To fix the issue, change the following registry key from: -``` +```txt HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts "Tahoma (TrueType)"="tahoma.FOT" ``` *to* -``` +```txt HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts "Tahoma (TrueType)"="TAHOMA.TTF" ```