]*>(.*?)<\/div>/gi;
430 | oBody = oBody.replace(oRegEx, "");
431 |
432 | // Set the response body to the div-less string
433 | oSession.utilSetResponseBody(oBody);
434 | }
435 |
436 | // Page 225
437 | // This callback function is called on Pref changes
438 | // under the branch we specified.
439 | static function FnChange(o: Object, pceA: PrefChangeEventArgs) {
440 | if (null != pceA) {
441 | MessageBox.Show(pceA.PrefName + " changed to: " + pceA.ValueString);
442 | }
443 | else {
444 | MessageBox.Show("Unexpected.");
445 | }
446 | }
447 |
448 | static function Main() {
449 | // Attach a callback to the preference change
450 | FiddlerObject.WatchPreference("fiddler.", FnChange);
451 | }
452 |
453 | // Page 248
454 | var oSessions = FiddlerApplication.UI.GetAllSessions();
455 | var oExportOptions = FiddlerObject.createDictionary();
456 | oExportOptions.Add("Filename", "C:\\users\\ericlaw\\desktop\\out1.har");
457 | oExportOptions.Add("MaxTextBodyLength", 1024);
458 | oExportOptions.Add("MaxBinaryBodyLength", 16384);
459 |
460 | FiddlerApplication.DoExport("HTTPArchive v1.2", oSessions, oExportOptions, null);
461 |
462 | // Page 281
463 | oSession["ui-hide"] = "hidden by Hide Images rule";
464 |
465 |
466 |
467 |
468 |
469 |
470 |
471 |
472 |
473 |
474 |
475 |
--------------------------------------------------------------------------------
/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
-1)) { // Case sensitive
169 | oSession.url = oSession.url.Replace(gs_ReplaceToken, gs_ReplaceTokenWith);
170 | }
171 | if ((null != gs_OverridenHost) && (oSession.host.toLowerCase() == gs_OverridenHost)) {
172 | oSession["x-overridehost"] = gs_OverrideHostWith;
173 | }
174 |
175 | if ((null!=bpRequestURI) && oSession.uriContains(bpRequestURI)) {
176 | oSession["x-breakrequest"]="uri";
177 | }
178 |
179 | if ((null!=bpMethod) && (oSession.HTTPMethodIs(bpMethod))) {
180 | oSession["x-breakrequest"]="method";
181 | }
182 |
183 | if ((null!=uiBoldURI) && oSession.uriContains(uiBoldURI)) {
184 | oSession["ui-bold"]="QuickExec";
185 | }
186 | //1.在此处【设置代理网络限速】1KB的量 50Kb/s需要delay 160ms
187 | //带宽:mbps kbps (比特流) 网速:KB/s MB/s (字节流)
188 | //修改完记得勾选【simulate modem speeds】[调用这个方法randInt(1,50) 模拟网络抖动]
189 | if (m_SimulateModem) {
190 | // Delay sends by 300ms per KB uploaded.
191 | oSession["request-trickle-delay"] = "1000";
192 | // Delay receives by 150ms per KB downloaded.
193 | oSession["response-trickle-delay"] = "1000";
194 | }
195 | //2.在此处【过滤并高亮显示host】
196 | if( oSession.host.IndexOf("i-play.mobile.youku.com") > -1 || oSession.host.IndexOf("a-dxk.play.api.3g.youku.com") > -1){
197 | oSession["ui-color"] = "green";
198 |
199 | }
200 | //3.在此处【过滤url并高亮显示】
201 | //if(oSession.url.IndexOf("/player/domain_name") > -1){
202 | // oSession["ui-color"] = "yellow";
203 | // }
204 |
205 | //4.在此处【重定向urlplace】host和url的判断 http:// http://
206 | if(oSession.HostnameIs("test.api.mobile.youku.com") && oSession.url.IndexOf("/openapi-wireless/initial") > -1){
207 | oSession.hostname = "api.mobile.youku.com"
208 | }
209 |
210 | if (m_DisableCaching) {
211 | oSession.oRequest.headers.Remove("If-None-Match");
212 | oSession.oRequest.headers.Remove("If-Modified-Since");
213 | oSession.oRequest["Pragma"] = "no-cache";
214 | }
215 |
216 | //5:修改请求版本检验的接口中的header
217 | if(oSession.HostnameIs("host") && oSession.url.IndexOf("/getAppVersionInfo")>-1)
218 | {
219 | oSession.oRequest["version"] = "1.0.0"
220 | }
221 |
222 | // User-Agent Overrides
223 | if (null != sUA) {
224 | oSession.oRequest["User-Agent"] = sUA;
225 | }
226 |
227 | if (m_Japanese) {
228 | oSession.oRequest["Accept-Language"] = "ja";
229 | }
230 |
231 | if (m_AutoAuth) {
232 | // Automatically respond to any authentication challenges using the
233 | // current Fiddler user's credentials. You can change (default)
234 | // to a domain\\username:password string if preferred.
235 | //
236 | // WARNING: This setting poses a security risk if remote
237 | // connections are permitted!
238 | oSession["X-AutoAuth"] = "(default)";
239 | }
240 |
241 | if (m_AlwaysFresh && (oSession.oRequest.headers.Exists("If-Modified-Since") || oSession.oRequest.headers.Exists("If-None-Match")))
242 | {
243 | oSession.utilCreateResponseAndBypassServer();
244 | oSession.responseCode = 304;
245 | oSession["ui-backcolor"] = "Lavender";
246 | }
247 | }
248 |
249 | // This function is called immediately after a set of request headers has
250 | // been read from the client. This is typically too early to do much useful
251 | // work, since the body hasn't yet been read, but sometimes it may be useful.
252 | //
253 | // For instance, see
254 | // http://blogs.msdn.com/b/fiddler/archive/2011/11/05/http-expect-continue-delays-transmitting-post-bodies-by-up-to-350-milliseconds.aspx
255 | // for one useful thing you can do with this handler.
256 | //
257 | // Note: oSession.requestBodyBytes is not available within this function!
258 | /*
259 | static function OnPeekAtRequestHeaders(oSession: Session) {
260 | var sProc = ("" + oSession["x-ProcessInfo"]).ToLower();
261 | if (!sProc.StartsWith("mylowercaseappname")) oSession["ui-hide"] = "NotMyApp";
262 | }
263 | */
264 |
265 | //
266 | // If a given session has response streaming enabled, then the OnBeforeResponse function
267 | // is actually called AFTER the response was returned to the client.
268 | //
269 | // In contrast, this OnPeekAtResponseHeaders function is called before the response headers are
270 | // sent to the client (and before the body is read from the server). Hence this is an opportune time
271 | // to disable streaming (oSession.bBufferResponse = true) if there is something in the response headers
272 | // which suggests that tampering with the response body is necessary.
273 | //
274 | // Note: oSession.responseBodyBytes is not available within this function!
275 | //
276 | static function OnPeekAtResponseHeaders(oSession: Session) {
277 | //FiddlerApplication.Log.LogFormat("Session {0}: Response header peek shows status is {1}", oSession.id, oSession.responseCode);
278 | if (m_DisableCaching) {
279 | oSession.oResponse.headers.Remove("Expires");
280 | oSession.oResponse["Cache-Control"] = "no-cache";
281 | }
282 |
283 | if ((bpStatus>0) && (oSession.responseCode == bpStatus)) {
284 | oSession["x-breakresponse"]="status";
285 | oSession.bBufferResponse = true;
286 | }
287 |
288 | if ((null!=bpResponseURI) && oSession.uriContains(bpResponseURI)) {
289 | oSession["x-breakresponse"]="uri";
290 | oSession.bBufferResponse = true;
291 | }
292 |
293 | }
294 |
295 | static function OnBeforeResponse(oSession: Session) {
296 | if (m_Hide304s && oSession.responseCode == 304) {
297 | oSession["ui-hide"] = "true";
298 | }
299 | /*
300 | //5.在此处修改response的bady内容
301 | if(oSession.HostnameIs("com") && oSession.url.IndexOf("/common/v5/play") > -1){
302 | // 获取response中的body字符串
303 | var strBody=oSession.GetResponseBodyAsString();
304 |
305 | // 用正则表达式或者replace方法去修改string
306 | var regx = '"stream_mode":\d*?'
307 | strBody=strBody.replace(regx,'"stream_mode":0');
308 | // 弹个对话框检查下修改后的body
309 | FiddlerObject.alert(strBody);
310 | // 将修改后的body,重新写回Request中
311 | oSession.utilSetResponseBody(strBody);
312 | }
313 | */
314 |
315 | /*
316 | //6.在此处修改json中的数据【修改接口字段的值】
317 | if(oSession.HostnameIs("i-play.mobile.youku.com") && oSession.url.IndexOf("/common/v5/play") > -1){
318 | // 获取Response Body中JSON字符串
319 | var responseStringOriginal = oSession.GetResponseBodyAsString();
320 | // 转换为可编辑的JSONObject变量
321 | var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(responseStringOriginal);
322 | // 修改JSONObject变量,修改字段数据
323 | responseJSON.JSONObject["new_core"] = "True";
324 | responseJSON.JSONObject["stream_mode"] = 5;
325 | // 重新设置Response Body
326 | var responseStringDestinal = Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject);
327 | oSession.utilSetResponseBody(responseStringDestinal);
328 | }
329 | */
330 |
331 |
332 |
333 | //7.在此处修改json中的数据【增加接口字段=值】
334 | if(oSession.HostnameIs("i-play.mobile.youku.com") && oSession.url.IndexOf("/common/v5/play") > -1){
335 | // 获取Response Body中JSON字符串
336 | var responseStringOriginal = oSession.GetResponseBodyAsString();
337 | // 转换为可编辑的JSONObject变量
338 | var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(responseStringOriginal);
339 | // 修改JSONObject变量,修改字段数据
340 | responseJSON.JSONObject["type_arr"] = ["bullet"];
341 | // 重新设置Response Body
342 | var responseStringDestinal = Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject);
343 | oSession.utilSetResponseBody(responseStringDestinal);
344 | }
345 |
346 | /*
347 | //8.修改系统弹幕的跳转方式【http://dmapp.youku.com/common/danmu/sysdmlist 】
348 | if(oSession.HostnameIs("dmapp.youku.com") && oSession.url.IndexOf("common/danmu/sysdmlist") > -1){
349 | // 获取Response Body中JSON字符串
350 | var responseStringOriginal = oSession.GetResponseBodyAsString();
351 | // 转换为可编辑的JSONObject变量
352 | var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(responseStringOriginal);
353 | // 修改JSONObject变量,修改字段数据
354 | responseJSON.JSONObject["data"]["results"][0]["displayMethod"] = 2;
355 | // 重新设置Response Body
356 | var responseStringDestinal = Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject);
357 | oSession.utilSetResponseBody(responseStringDestinal);
358 | }*/
359 | /*
360 |
361 | //脚本9:该方法进行修改pdl首页状态显示内容
362 | if(oSession.HostnameIs("10.150.20.82:8092") && oSession.url.IndexOf("/userAccount/mainPage")>-1){
363 |
364 | var res = oSession.GetResponseBodyAsString();
365 | var resJson = Fiddler.WebFormats.JSON.JsonDecode(res);
366 | //借款状态:1未申请,2审核中,3审核通过,4审核被拒,6借款申请失败,7借款申请成功(待签约),8签
367 | var rand = randInt(1,8);
368 | if (rand == 5){
369 | rand=1;
370 | }
371 |
372 | resJson.JSONObject['data']['loanStatus'] = rand;
373 |
374 | var newRes = Fiddler.WebFormats.JSON.JsonEncode(resJson.JSONObject);
375 | oSession.utilSetResponseBody(newRes);
376 |
377 | //FiddlerObject.alert(rand);
378 |
379 | }
380 | */
381 | /*
382 | //脚本10:该方法进行修改pdl我的页面状态显示内容
383 | if(oSession.HostnameIs("hoat") && oSession.url.IndexOf("/userAccount/findCreditAmount")>-1){
384 | var res = oSession.GetResponseBodyAsString();
385 | var resJson = Fiddler.WebFormats.JSON.JsonDecode(res);
386 | //前端按钮显示类型(0:立即验证身份,获取额度;1:立即借款;2:立即还款;3:在途)
387 | var rand = randInt(0,3);
388 | if(rand == 2){
389 | //FiddlerObject.alert(rand);
390 | rand = 3;
391 | }
392 | resJson.JSONObject['data']['showType'] = rand;
393 | var newRes = Fiddler.WebFormats.JSON.JsonEncode(resJson.JSONObject);
394 | oSession.utilSetResponseBody(newRes);
395 |
396 | }*/
397 |
398 | /*
399 | //脚本11:主要验证版本升级接口对应客户端的功能
400 | if(oSession.HostnameIs("host") && oSession.url.IndexOf("/getAppVersionInfo")>-1){
401 | //var res = oSession.GetResponseBodyAsString();
402 |
403 | var jsondata = '{"data": {"newestUrl": "url","newestVersion": "1.0.1","upgradeContent": "测试描述:版本升级","upgradeType": "1"},"message": "操作成功","status": "000000"}';
404 | var resJson = Fiddler.WebFormats.JSON.JsonDecode(jsondata);
405 | var newRes = Fiddler.WebFormats.JSON.JsonEncode(resJson.JSONObject);
406 |
407 | oSession.utilSetResponseBody(newRes);
408 |
409 | }*/
410 |
411 | }
412 |
413 | /*
414 | // This function executes just before Fiddler returns an error that it has
415 | // itself generated (e.g. "DNS Lookup failure") to the client application.
416 | // These responses will not run through the OnBeforeResponse function above.
417 | static function OnReturningError(oSession: Session) {
418 | }
419 | */
420 | /*
421 | // This function executes after Fiddler finishes processing a Session, regardless
422 | // of whether it succeeded or failed. Note that this typically runs AFTER the last
423 | // update of the Web Sessions UI listitem, so you must manually refresh the Session's
424 | // UI if you intend to change it.
425 | static function OnDone(oSession: Session) {
426 | }
427 | */
428 |
429 | /*
430 | static function OnBoot() {
431 | MessageBox.Show("Fiddler has finished booting");
432 | System.Diagnostics.Process.Start("iexplore.exe");
433 |
434 | UI.ActivateRequestInspector("HEADERS");
435 | UI.ActivateResponseInspector("HEADERS");
436 | }
437 | */
438 |
439 | /*
440 | static function OnBeforeShutdown(): Boolean {
441 | // Return false to cancel shutdown.
442 | return ((0 == FiddlerApplication.UI.lvSessions.TotalItemCount()) ||
443 | (DialogResult.Yes == MessageBox.Show("Allow Fiddler to exit?", "Go Bye-bye?",
444 | MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)));
445 | }
446 | */
447 |
448 | /*
449 | static function OnShutdown() {
450 | MessageBox.Show("Fiddler has shutdown");
451 | }
452 | */
453 |
454 | /*
455 | static function OnAttach() {
456 | MessageBox.Show("Fiddler is now the system proxy");
457 | }
458 | */
459 |
460 | /*
461 | static function OnDetach() {
462 | MessageBox.Show("Fiddler is no longer the system proxy");
463 | }
464 | */
465 |
466 | // The Main() function runs everytime your FiddlerScript compiles
467 | static function Main() {
468 | var today: Date = new Date();
469 | FiddlerObject.StatusText = " CustomRules.js was loaded at: " + today;
470 |
471 | // Uncomment to add a "Server" column containing the response "Server" header, if present
472 | // UI.lvSessions.AddBoundColumn("Server", 50, "@response.server");
473 |
474 | // Uncomment to add a global hotkey (Win+G) that invokes the ExecAction method below...
475 | // UI.RegisterCustomHotkey(HotkeyModifiers.Windows, Keys.G, "screenshot");
476 | }
477 |
478 | // These static variables are used for simple breakpointing & other QuickExec rules
479 | BindPref("fiddlerscript.ephemeral.bpRequestURI")
480 | public static var bpRequestURI:String = null;
481 |
482 | BindPref("fiddlerscript.ephemeral.bpResponseURI")
483 | public static var bpResponseURI:String = null;
484 |
485 | BindPref("fiddlerscript.ephemeral.bpMethod")
486 | public static var bpMethod: String = null;
487 |
488 | static var bpStatus:int = -1;
489 | static var uiBoldURI: String = null;
490 | static var gs_ReplaceToken: String = null;
491 | static var gs_ReplaceTokenWith: String = null;
492 | static var gs_OverridenHost: String = null;
493 | static var gs_OverrideHostWith: String = null;
494 |
495 | // The OnExecAction function is called by either the QuickExec box in the Fiddler window,
496 | // or by the ExecAction.exe command line utility.
497 | static function OnExecAction(sParams: String[]): Boolean {
498 |
499 | FiddlerObject.StatusText = "ExecAction: " + sParams[0];
500 |
501 | var sAction = sParams[0].toLowerCase();
502 | switch (sAction) {
503 | case "bold":
504 | if (sParams.Length<2) {uiBoldURI=null; FiddlerObject.StatusText="Bolding cleared"; return false;}
505 | uiBoldURI = sParams[1]; FiddlerObject.StatusText="Bolding requests for " + uiBoldURI;
506 | return true;
507 | case "bp":
508 | FiddlerObject.alert("bpu = breakpoint request for uri\nbpm = breakpoint request method\nbps=breakpoint response status\nbpafter = breakpoint response for URI");
509 | return true;
510 | case "bps":
511 | if (sParams.Length<2) {bpStatus=-1; FiddlerObject.StatusText="Response Status breakpoint cleared"; return false;}
512 | bpStatus = parseInt(sParams[1]); FiddlerObject.StatusText="Response status breakpoint for " + sParams[1];
513 | return true;
514 | case "bpv":
515 | case "bpm":
516 | if (sParams.Length<2) {bpMethod=null; FiddlerObject.StatusText="Request Method breakpoint cleared"; return false;}
517 | bpMethod = sParams[1].toUpperCase(); FiddlerObject.StatusText="Request Method breakpoint for " + bpMethod;
518 | return true;
519 | case "bpu":
520 | if (sParams.Length<2) {bpRequestURI=null; FiddlerObject.StatusText="RequestURI breakpoint cleared"; return false;}
521 | bpRequestURI = sParams[1];
522 | FiddlerObject.StatusText="RequestURI breakpoint for "+sParams[1];
523 | return true;
524 | case "bpa":
525 | case "bpafter":
526 | if (sParams.Length<2) {bpResponseURI=null; FiddlerObject.StatusText="ResponseURI breakpoint cleared"; return false;}
527 | bpResponseURI = sParams[1];
528 | FiddlerObject.StatusText="ResponseURI breakpoint for "+sParams[1];
529 | return true;
530 | case "overridehost":
531 | if (sParams.Length<3) {gs_OverridenHost=null; FiddlerObject.StatusText="Host Override cleared"; return false;}
532 | gs_OverridenHost = sParams[1].toLowerCase();
533 | gs_OverrideHostWith = sParams[2];
534 | FiddlerObject.StatusText="Connecting to [" + gs_OverrideHostWith + "] for requests to [" + gs_OverridenHost + "]";
535 | return true;
536 | case "urlreplace":
537 | if (sParams.Length<3) {gs_ReplaceToken=null; FiddlerObject.StatusText="URL Replacement cleared"; return false;}
538 | gs_ReplaceToken = sParams[1];
539 | gs_ReplaceTokenWith = sParams[2].Replace(" ", "%20"); // Simple helper
540 | FiddlerObject.StatusText="Replacing [" + gs_ReplaceToken + "] in URIs with [" + gs_ReplaceTokenWith + "]";
541 | return true;
542 | case "allbut":
543 | case "keeponly":
544 | if (sParams.Length<2) { FiddlerObject.StatusText="Please specify Content-Type to retain during wipe."; return false;}
545 | UI.actSelectSessionsWithResponseHeaderValue("Content-Type", sParams[1]);
546 | UI.actRemoveUnselectedSessions();
547 | UI.lvSessions.SelectedItems.Clear();
548 | FiddlerObject.StatusText="Removed all but Content-Type: " + sParams[1];
549 | return true;
550 | case "stop":
551 | UI.actDetachProxy();
552 | return true;
553 | case "start":
554 | UI.actAttachProxy();
555 | return true;
556 | case "cls":
557 | case "clear":
558 | UI.actRemoveAllSessions();
559 | return true;
560 | case "g":
561 | case "go":
562 | UI.actResumeAllSessions();
563 | return true;
564 | case "goto":
565 | if (sParams.Length != 2) return false;
566 | Utilities.LaunchHyperlink("http://www.google.com/search?hl=en&btnI=I%27m+Feeling+Lucky&q=" + Utilities.UrlEncode(sParams[1]));
567 | return true;
568 | case "help":
569 | Utilities.LaunchHyperlink("http://fiddler2.com/r/?quickexec");
570 | return true;
571 | case "hide":
572 | UI.actMinimizeToTray();
573 | return true;
574 | case "log":
575 | FiddlerApplication.Log.LogString((sParams.Length<2) ? "User couldn't think of anything to say..." : sParams[1]);
576 | return true;
577 | case "nuke":
578 | UI.actClearWinINETCache();
579 | UI.actClearWinINETCookies();
580 | return true;
581 | case "screenshot":
582 | UI.actCaptureScreenshot(false);
583 | return true;
584 | case "show":
585 | UI.actRestoreWindow();
586 | return true;
587 | case "tail":
588 | if (sParams.Length<2) { FiddlerObject.StatusText="Please specify # of sessions to trim the session list to."; return false;}
589 | UI.TrimSessionList(int.Parse(sParams[1]));
590 | return true;
591 | case "quit":
592 | UI.actExit();
593 | return true;
594 | case "dump":
595 | UI.actSelectAll();
596 | UI.actSaveSessionsToZip(CONFIG.GetPath("Captures") + "dump.saz");
597 | UI.actRemoveAllSessions();
598 | FiddlerObject.StatusText = "Dumped all sessions to " + CONFIG.GetPath("Captures") + "dump.saz";
599 | return true;
600 |
601 | default:
602 | if (sAction.StartsWith("http") || sAction.StartsWith("www.")) {
603 | System.Diagnostics.Process.Start(sParams[0]);
604 | return true;
605 | }
606 | else
607 | {
608 | FiddlerObject.StatusText = "Requested ExecAction: '" + sAction + "' not found. Type HELP to learn more.";
609 | return false;
610 | }
611 | }
612 | }
613 | }
--------------------------------------------------------------------------------