fidder 使用教程

Posted 每天进步一点点!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fidder 使用教程相关的知识,希望对你有一定的参考价值。

 

fidder 使用教程

 

1. Fiddler 是什么?

Fiddler是用C#编写的一个免费的HTTP/HTTPS网络调试器。英语中Fiddler是小提琴的意思,Fiddler Web Debugger就像小提琴一样,可以让前端开发变得更加优雅。

Fiddler是以代理服务器的方式,监听系统的网络数据流动。运行Fiddler后,就会在本地打开8888端口,网络数据流通过Fiddler进行中转时,我们可以监视HTTP/HTTPS数据流的记录,并加以分析,甚至还可以修改发送和接收的数据。Fiddler还提供了清除IE缓存、请求构造器、文本转换工具等等一系列工具,对前端开发工作很有价值。

2. 下载和安装Fiddler

  1. 安装.net framework 2.0以上版本
  2. 官方网站免费下载Fiddler。

Firefox中用Fiddler,可以下载一个插件:Fiddler开关

3. Fiddler的界面和功能

 

左侧是数据列表,以不同的图标区分数据类型和状态,以下是图标对应的含义:

正在将请求数据发往服务器
正在从服务器下载返回数据
请求过程中暂停
返回过程中暂停
请求中使用了HTTP HEAD方法; 返回中应该没有body内容
请求中使用了HTTP CONNECT方法,建立HTTPS连接通道
返回的内容类型是html
返回的内容类型是图片
返回的内容类型是javascript
返回的内容类型是CSS
返回的内容类型是XML
普通的成功的返回
返回内容为 HTTP/300,301,302,303 or 307 跳转
返回内容为HTTP/304: 使用本地缓存
返回内容为一个证书请求
返回内容是服务器错误
请求被客户端、Fiddler或服务器中断

 

 

 

 

 常用的命令行工具

   

命令行 - 允许你直接输入命令,详细官方文档介
http://docs.telerik.com/fiddler/KnowledgeBase/QuickExec

你也可以在命令行中输入“help” 

cls    清屏  (Ctrl+x 也可以清屏)

select  选择会话的命令

?.jpg  用来选择jpg后缀的图片的会话

bpu  截获request

?关键字

 

自定义规则 customrules.js 文件

  1 import System;
  2 import System.Windows.Forms;
  3 import Fiddler;
  4 
  5 // INTRODUCTION
  6 //
  7 // Well, hello there!
  8 //
  9 // Don\'t be scared! :-)
 10 //
 11 // This is the FiddlerScript Rules file, which creates some of the menu commands and
 12 // other features of Fiddler. You can edit this file to modify or add new commands.
 13 //
 14 // The original version of this file is named SampleRules.js and it is in the
 15 // \\Program Files\\Fiddler\\ folder. When Fiddler first runs, it creates a copy named
 16 // CustomRules.js inside your \\Documents\\Fiddler2\\Scripts folder. If you make a 
 17 // mistake in editing this file, simply delete the CustomRules.js file and restart
 18 // Fiddler. A fresh copy of the default rules will be created from the original
 19 // sample rules file.
 20 
 21 // The best way to edit this file is to install the FiddlerScript Editor, part of
 22 // the free SyntaxEditing addons. Get it here: http://fiddler2.com/r/?SYNTAXVIEWINSTALL
 23 
 24 // GLOBALIZATION NOTE: Save this file using UTF-8 Encoding.
 25 
 26 // JScript.NET Reference
 27 // http://fiddler2.com/r/?msdnjsnet
 28 //
 29 // FiddlerScript Reference
 30 // http://fiddler2.com/r/?fiddlerscriptcookbook
 31 
 32 class Handlers
 33 {
 34     // *****************
 35     //
 36     // This is the Handlers class. Pretty much everything you ever add to FiddlerScript
 37     // belongs right inside here, or inside one of the already-existing functions below.
 38     //
 39     // *****************
 40 
 41     // The following snippet demonstrates a custom-bound column for the Web Sessions list.
 42     // See http://fiddler2.com/r/?fiddlercolumns for more info
 43     /*
 44       public static BindUIColumn("Method", 60)
 45       function FillMethodColumn(oS: Session): String {
 46          return oS.RequestMethod;
 47       }
 48     */
 49 
 50     // The following snippet demonstrates how to create a custom tab that shows simple text
 51     /*
 52        public BindUITab("Flags")
 53        static function FlagsReport(arrSess: Session[]):String {
 54         var oSB: System.Text.StringBuilder = new System.Text.StringBuilder();
 55         for (var i:int = 0; i<arrSess.Length; i++)
 56         {
 57             oSB.AppendLine("SESSION FLAGS");
 58             oSB.AppendFormat("{0}: {1}\\n", arrSess[i].id, arrSess[i].fullUrl);
 59             for(var sFlag in arrSess[i].oFlags)
 60             {
 61                 oSB.AppendFormat("\\t{0}:\\t\\t{1}\\n", sFlag.Key, sFlag.Value);
 62             }
 63         }
 64         return oSB.ToString();
 65     }
 66     */
 67 
 68     // You can create a custom menu like so:
 69     /*
 70     QuickLinkMenu("&Links") 
 71     QuickLinkItem("IE GeoLoc TestDrive", "http://ie.microsoft.com/testdrive/HTML5/Geolocation/Default.html")
 72     QuickLinkItem("FiddlerCore", "http://fiddler2.com/fiddlercore")
 73     public static function DoLinksMenu(sText: String, sAction: String)
 74     {
 75         Utilities.LaunchHyperlink(sAction);
 76     }
 77     */
 78 
 79     public static RulesOption("Hide 304s")
 80     BindPref("fiddlerscript.rules.Hide304s")
 81     var m_Hide304s: boolean = false;
 82 
 83     // Cause Fiddler to override the Accept-Language header with one of the defined values
 84     public static RulesOption("Request &Japanese Content")
 85     var m_Japanese: boolean = false;
 86 
 87     // Automatic Authentication
 88     public static RulesOption("&Automatically Authenticate")
 89     BindPref("fiddlerscript.rules.AutoAuth")
 90     var m_AutoAuth: boolean = false;
 91 
 92     // Cause Fiddler to override the User-Agent header with one of the defined values
 93     // The page http://browserscope2.org/browse?category=selectors&ua=Mobile%20Safari is a good place to find updated versions of these
 94     RulesString("&User-Agents", true) 
 95     BindPref("fiddlerscript.ephemeral.UserAgentString")
 96     //RulesStringValue(0,"Netscape &3", "Mozilla/3.0 (Win95; I)")
 97    // RulesStringValue(1,"WinPhone8.1", "Mozilla/5.0 (Mobile; Windows Phone 8.1; android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 520) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537")
 98    // RulesStringValue(2,"&Safari5 (Win7)", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1")
 99     RulesStringValue(3,"Safari9 (Mac)", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit/601.1.56 (KHTML, like Gecko) Version/9.0 Safari/601.1.56")
100     RulesStringValue(4,"iPad", "Mozilla/5.0 (iPad; CPU OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F5027d Safari/600.1.4")
101     RulesStringValue(5,"iPhone6", "Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4")
102    // RulesStringValue(6,"IE &6 (XPSP2)", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)")
103    // RulesStringValue(7,"IE &7 (Vista)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1)")
104    // RulesStringValue(8,"IE 8 (Win2k3 x64)", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; WOW64; Trident/4.0)")
105    //RulesStringValue(9,"IE &8 (Win7)", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)")
106     //RulesStringValue(10,"IE 9 (Win7)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)")
107    // RulesStringValue(11,"IE 10 (Win8)", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)")
108     //RulesStringValue(12,"IE 11 (Surface2)", "Mozilla/5.0 (Windows NT 6.3; ARM; Trident/7.0; Touch; rv:11.0) like Gecko")
109     //RulesStringValue(13,"IE 11 (Win8.1)", "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko")
110   //  RulesStringValue(14,"Edge (Win10)", "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.11082")
111     RulesStringValue(15,"&Opera", "Opera/9.80 (Windows NT 6.2; WOW64) Presto/2.12.388 Version/12.17")
112     RulesStringValue(16,"&Firefox 3.6", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.7) Gecko/20100625 Firefox/3.6.7")
113     RulesStringValue(17,"&Firefox 43", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0")
114     RulesStringValue(18,"&Firefox Phone", "Mozilla/5.0 (Mobile; rv:18.0) Gecko/18.0 Firefox/18.0")
115     RulesStringValue(19,"&Firefox (Mac)", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0")
116     //RulesStringValue(20,"Chrome (Win)", "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.48 Safari/537.36")
117    // RulesStringValue(21,"Chrome (Android)", "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.78 Mobile Safari/537.36")
118    // RulesStringValue(22,"ChromeBook", "Mozilla/5.0 (X11; CrOS x86_64 6680.52.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.74 Safari/537.36")
119    // RulesStringValue(23,"GoogleBot Crawler", "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)")
120    // RulesStringValue(24,"Kindle Fire (Silk)", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.0.22.79_10013310) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true")
121     RulesStringValue(25,"&Custom...", "%CUSTOM%")
122     public static var sUA: String = null;
123 
124     // Cause Fiddler to delay HTTP traffic to simulate typical 56k modem conditions
125     public static RulesOption("Simulate &Modem Speeds", "Per&formance")
126     var m_SimulateModem: boolean = false;
127 
128     // Removes HTTP-caching related headers and specifies "no-cache" on requests and responses
129     public static RulesOption("&Disable Caching", "Per&formance")
130     var m_DisableCaching: boolean = false;
131 
132     public static RulesOption("Cache Always &Fresh", "Per&formance")
133     var m_AlwaysFresh: boolean = false;
134         
135     // Force a manual reload of the script file.  Resets all
136     // RulesOption variables to their defaults.
137     public static ToolsAction("Reset Script")
138     function DoManualReload() { 
139         FiddlerObject.ReloadScript();
140     }
141 
142     public static ContextAction("Decode Selected Sessions")
143     function DoRemoveEncoding(oSessions: Session[]) {
144         for (var x:int = 0; x < oSessions.Length; x++){
145             oSessions[x].utilDecodeRequest();
146             oSessions[x].utilDecodeResponse();
147         }
148         UI.actUpdateInspector(true,true);
149     }
150 
151     static function OnBeforeRequest(oSession: Session) {
152         // Sample Rule: Color ASPX requests in RED
153         // if (oSession.uriContains(".aspx")) {    oSession["ui-color"] = "red";    }
154 
155         // Sample Rule: Flag POSTs to fiddler2.com in italics
156         // if (oSession.HostnameIs("www.fiddler2.com") && oSession.HTTPMethodIs("POST")) {    oSession["ui-italic"] = "yup";    }
157 
158         // Sample Rule: Break requests for URLs containing "/sandbox/"
159         // if (oSession.uriContains("/sandbox/")) {
160         //     oSession.oFlags["x-breakrequest"] = "yup";    // Existence of the x-breakrequest flag creates a breakpoint; the "yup" value is unimportant.
161         // }
162         //===============================李度编写start=========================
163         if (oSession.HostnameIs("www.fiddler2.com") && oSession.HTTPMethodIs("POST"))
164             {    oSession["ui-hide"] = true;    }
165         if(oSession.HostnameIs("sofire.baidu.com")||oSession.HostnameIs("clients1.google.com")||oSession.HostnameIs("sp1.baidu.com:443")||oSession.HostnameIs("oc.umeng.com")||oSession.HostnameIs("sp1.baidu.com:443"))
166         {
167                oSession["ui-hide"] = "true"; 
168             
169          }
170       if (oSession.uriContains("baidu")||oSession.uriContains("bdstatic")||oSession.uriContains("opera")
171             ||oSession.uriContains("adsafe")||oSession.uriContains("microsoft")||oSession.uriContains("qq")
172             ||oSession.uriContains("oupeng")||oSession.uriContains("umeng")||oSession.uriContains("ad")
173             ||oSession.uriContains("googleapis")||oSession.uriContains("xiaomi")||oSession.uriContains("apple")
174         ) 
175             {    
176             oSession["ui-color"] = "green";
177             oSession["ui-hide"] = "true"; 
178             }
179         //===============================李度编写over=========================
180 
181         if ((null != gs_ReplaceToken) && (oSession.url.indexOf(gs_ReplaceToken)>-1)) {   // Case sensitive
182             oSession.url = oSession.url.Replace(gs_ReplaceToken, gs_ReplaceTokenWith); 
183         }
184         if ((null != gs_OverridenHost) && (oSession.host.toLowerCase() == gs_OverridenHost)) {
185             oSession["x-overridehost"] = gs_OverrideHostWith; 
186         }
187 
188         if ((null!=bpRequestURI) && oSession.uriContains(bpRequestURI)) {
189             oSession["x-breakrequest"]="uri";
190         }
191 
192         if ((null!=bpMethod) && (oSession.HTTPMethodIs(bpMethod))) {
193             oSession["x-breakrequest"]="method";
194         }
195 
196         if ((null!=uiBoldURI) && oSession.uriContains(uiBoldURI)) {
197             oSession["ui-bold"]="QuickExec";
198         }
199 
200         if (m_SimulateModem) {
201             // Delay sends by 300ms per KB uploaded.
202             oSession["request-trickle-delay"] = "300"; 
203             // Delay receives by 150ms per KB downloaded.
204             oSession["response-trickle-delay"] = "150"; 
205         }
206 
207         if (m_DisableCaching) {
208             oSession.oRequest.headers.Remove("If-None-Match");
209             oSession.oRequest.headers.Remove("If-Modified-Since");
210             oSession.oRequest["Pragma"] = "no-cache";
211         }
212 
213         // User-Agent Overrides
214         if (null != sUA) {
215             oSession.oRequest["User-Agent"] = sUA; 
216         }
217 
218         if (m_Japanese) {
219             oSession.oRequest["Accept-Language"] = "ja";
220         }
221 
222         if (m_AutoAuth) {
223             // Automatically respond to any authentication challenges using the 
224             // current Fiddler user\'s credentials. You can change (default)
225             // to a domain\\\\username:password string if preferred.
226             //
227             // WARNING: This setting poses a security risk if remote 
228             // connections are permitted!
229             oSession["X-AutoAuth"] = "(default)";
230         }
231 
232         if (m_AlwaysFresh && (oSession.oRequest.headers.Exists("If-Modified-Since") || oSession.oRequest.headers.Exists("If-None-Match")))
233         {
234             oSession.utilCreateResponseAndBypassServer();
235             oSession.responseCode = 304;
236             oSession["ui-backcolor"] = "Lavender";
237         }
238     }
239 
240     // This function is called immediately after a set of request headers has
241     // been read from the client. This is typically too early to do much useful
242     // work, since the body hasn\'t yet been read, but sometimes it may be useful.
243     //
244     // For instance, see 
245     // http://blogs.msdn.com/b/fiddler/archive/2011/11/05/http-expect-continue-delays-transmitting-post-bodies-by-up-to-350-milliseconds.aspx
246     // for one useful thing you can do with this handler.
247     //
248     // Note: oSession.requestBodyBytes is not available within this function!
249 /*
250     static function OnPeekAtRequestHeaders(oSession: Session) {
251         var sProc = ("" + oSession["x-ProcessInfo"]).ToLower();
252         if (!sProc.StartsWith("mylowercaseappname")) oSession["ui-hide"] = "NotMyApp";
253     }
254 */
255 
256     //
257     // If a given session has response streaming enabled, then the OnBeforeResponse function 
258     // is actually called AFTER the response was returned to the client.
259     //
260     // In contrast, this OnPeekAtResponseHeaders function is called before the response headers are 
261     // sent to the client (and before the body is read from the server).  Hence this is an opportune time 
262     // to disable streaming (oSession.bBufferResponse = true) if there is something in the response headers 
263     // which suggests that tampering with the response body is necessary.
264     // 
265     // Note: oSession.responseBodyBytes is not available within this function!
266     //
267     static function OnPeekAtResponseHeaders(oSession: Session) {
268         //FiddlerApplication.Log.LogFormat("Session {0}: Response header peek shows status is {1}", oSession.id, oSession.responseCode);
269         if (m_DisableCaching) {
270             oSession.oResponse.headers.Remove("Expires");
271             oSession.oResponse["Cache-Control"] = "no-cache";
272         }
273 
274         if ((bpStatus>0) && (oSession.responseCode == bpStatus)) {
275             oSession["x-breakresponse"]="status";
276             oSession.bBufferResponse = true;
277         }
278         
279         if ((null!=bpResponseURI) && oSession.uriContains(bpResponseURI)) {
280             oSession["x-breakresponse"]="uri";
281             oSession.bBufferResponse = true;
282         }
283 
284     }
285 
286     static function OnBeforeResponse(oSession: Session) {
287         if (m_Hide304s && oSession.responseCode == 304) {
288             oSession["ui-hide"] = "true";
289         }
290     }
291 
292 /*
293     // This function executes just before Fiddler returns an error that it has 
294     // itself generated (e.g. "DNS Lookup failure") to the client application.
295     // These responses will not run through the OnBeforeResponse function above.
296     static function OnReturningError(oSession: Session) {
297     }
298 */
299 /*
300     // This function executes after Fiddler finishes processing a Session, regardless
301     // of whether it succeeded or failed. Note that this typically runs AFTER the last
302     // update of the Web Sessions UI listitem, so you must manually refresh the Session\'s
303     // UI if you intend to change it.
304     static function OnDone(oSession: Session) {
305     }
306 */
307 
308     /*
309     static function OnBoot() {
310         MessageBox.Show("Fiddler has finished booting");
311         System.Diagnostics.Process.Start("iexplore.exe");
312 
313         UI.ActivateRequestInspector("HEADERS");
314         UI.ActivateResponseInspector("HEADERS");
315     }
316     */
317 
318     /*
319     static function OnBeforeShutdown(): Boolean {
320         // Return false to cancel shutdown.
321         return ((0 == FiddlerApplication.UI.lvSessions.TotalItemCount()) ||
322                 (DialogResult.Yes == MessageBox.Show("Allow Fiddler to exit?", "Go Bye-bye?",
323                  MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)));
324     }
325     */
326 
327     /*
328     static function OnShutdown() {
329             MessageBox.Show("Fiddler has shutdown");
330     }
331     */
332 
333     /*
334     static function OnAttach() {
335         MessageBox.Show("Fiddler is now the system proxy");
336     }
337     */
338 
339     /*
340     static function OnDetach() {
341         MessageBox.Show("Fiddler is no longer the system proxy");
342     }
343     */
344 
345     // The Main() function runs everytime your FiddlerScript compiles
346     static function Main() {
347         var today: Date = new Date();
348         FiddlerObject.StatusText = " CustomRules.js was loaded at: " + today;
349 
350         // Uncomment to add a "Server" column containing the response "Server" header, if present
351         // UI.lvSessions.AddBoundColumn("Server", 50, "@response.server");
352 
353         // Uncomment to add a global hotkey (Win+G) that invokes the ExecAction method below...
354         // UI.RegisterCustomHotkey(HotkeyModifiers.Windows, Keys.G, "screenshot"); 
355     }
356 
357     // These static variables are used for simple breakpointing & other QuickExec rules 
358     BindPref("fiddlerscript.ephemeral.bpRequestURI")
359     public static var bpRequestURI:String = null;
360 
361     BindPref("fiddlerscript.ephemeral.bpResponseURI")
362     public static var bpResponseURI:String = null;
363 
364     BindPref("fiddlerscript.ephemeral.bpMethod")
365     public static var bpMethod: String = null;
366 
367     static var bpStatus:int = -1;
368     static var uiBoldURI: String = null;
369     static var gs_ReplaceToken: String = null;
370     static var gs_ReplaceTokenWith: String = null;
371     static var gs_OverridenHost: String = null;
372     static var gs_OverrideHostWith: String = null;
373 
374     // The OnExecAction function is called by either the QuickExec box in the Fiddler window,
375     // or by the ExecAction.exe command line utility.
376     static function OnExecAction(sParams: String[]): Boolean {
377 
378         FiddlerObject.StatusText = "ExecAction: " + sParams[0];
379 
380         var sAction = sParams[0].toLowerCase();
381         switch (sAction) {
382         case "bold":
383             if (sParams.Length<2) {uiBoldURI=null; FiddlerObject.StatusText="Bolding cleared"; return false;}
384             uiBoldURI = sParams[1]; FiddlerObject.StatusText="Bolding requests for " + uiBoldURI;
385             return true;
386         case "bp":
387             FiddlerObject.alert("bpu = breakpoint request for uri\\nbpm = breakpoint request method\\nbps=breakpoint response status\\nbpafter = breakpoint response for URI");
388             return true;
389         case "bps":
390             if (sParams.Length<2) {bpStatus=-1; FiddlerObject.StatusText="Response Status breakpoint cleared"; return false;}
391             bpStatus = parseInt(sParams[1]); FiddlerObject.StatusText="Response status breakpoint for " + sParams[1];
392             return true;
393         case "bpv":
394         case "bpm":
395             if (sParams.Length<2) {bpMethod=null; FiddlerObject.StatusText="Request Method breakpoint cleared"; return false;}
396             bpMethod = sParams[1].toUpperCase(); FiddlerObject.StatusText="Request Method breakpoint for " + bpMethod;
397             return true;
398         case "bpu":
399             if (sParams.Length<2) {bpRequestURI=null; FiddlerObject.StatusText="RequestURI breakpoint cleared"以上是关于fidder 使用教程的主要内容,如果未能解决你的问题,请参考以下文章

Fidder教程

Fidder教程

fidder 安装后直接跳到一个网页,程序也没打开,这是这么回事

VIM 代码片段插件 ultisnips 使用教程

Fidder怎么用?如何利用Fiddler修改QQ钱包余额

通过fidder抓npm拉包协议