Fiddler:bpu 阻塞多个请求

来源:互联网 发布:知乎无法提交答案 编辑:程序博客网 时间:2024/06/06 12:59
Fiddler教程,在持续不断的更新中

背景:
今天同事问我,bpu怎么同时阻塞多个请求呢?
同事 :
我是这样写的 bpu a b ,我这样写怎么实现不了同时阻塞a 和 b 请求呢?
我:
我没有这样阻塞过,但是在我的理解里应该这样写,bpu a enter执行,bpu b enter执行,分开执行(因为我之前没有这样阻塞过,只是按照自己的理解这样认为的,接下来就打脸了,不都是你以为的就是你以为的啊,泪奔啊)
同事:
我按照你说的方式做了,但是还是不可以啊,

额~,好尴尬啊

我只有默默的打开Fiddler,ctr+R打开脚本,ctr+F 输入关键字 bpu,找到bpu命令所在的核心代码

case "bpu":                var len = sParams.Length ;                if (sParams.Length<2) {bpRequestURI=null; FiddlerObject.StatusText="bpRequestURI  breakpoint cleared"; return false;}                var len = sParams.Length ;                bpRequestURI= sParams[1];                 FiddlerObject.StatusText="RequestURI breakpoint for "+sParams[1];                return true;

核心: bpRequestURI= sParams[1]; 只取了一个参数值。
场景1解析(也就是同事的执行方法): bpu /sdk /zwf ,
使用空格隔开的,那么
sParams[0] = “bpu”
sParams[1] = “/sdk”
sParams[2] = “/zwf”
只取了sParams[1] = “/sdk”,所以只会阻塞包含/sdk的请求

场景2解析(也就是我认为的方法,允许我哭一会):
bpu /sdk
bpu /zwf
每次执行bpRequestURI,都会被赋新值,所以我阻塞包含/zwf 的请求

我们怎么样才可以实现,阻塞多个请求呢?

让我沿着核心代码,顺藤抹瓜,ctr+F 输入关键字 bpRequestURI 查询,找到参数定义的地方

这个是定义变量的地方,是全局变量

//在main()方法中// These static variables are used for simple breakpointing & other QuickExec rules     BindPref("fiddlerscript.ephemeral.bpRequestURI")    public static var bpRequestURI:String = null;

找到使用此参数,bpRequestURI 不为null ,并且 请求的uri 包含bpRequestURI ,则阻断该请求

if ((null!=bpRequestURI) && oSession.uriContains(bpRequestURI)) {    oSession["x-breakrequest"]="uri";}

这样捋下来,就搞明白了,阻塞请求是怎么个原理了,是不是也很简单呢?!
接下来就是改造它来实现bpu 阻塞多个请求了。

第一步:

//在main()添加如下代码BindPref("fiddlerscript.ephemeral.bpRequestURI")//数组的长度10,10个阻塞的命令,内容为空格,和bpu命令用空格分割保持一致public static var bpRequestURIs:String[] = [" "," "," "," "," "," "," "," "," "," "] ;

第二步:

    case "bpu":                var len1 = sParams.Length ;                var len2 = bpRequestURIs.Length;                //每次赋值之前先恢复原始值                for(var i = 0; i< len2; i++){                    bpRequestURIs[i]=" ";                }                if (len1 < 2) {bpRequestURI=null; FiddlerObject.StatusText="RequestURI breakpoint cleared"; return false;}                var text = "";                for(var i = 1; i < len1; i++){                    bpRequestURIs[i-1] = sParams[i];                    text += sParams[i] +" ";                }                FiddlerObject.StatusText="RequestURI breakpoint for " + text;                return true;

第三步:

// 在OnBeforeRequest() 方法中// 注释掉之前的方法//  if ((null!=bpRequestURI) && oSession.uriContains(bpRequestURI)) {//      oSession["x-breakrequest"]="uri";//  }        var len = bpRequestURIs.Length;        for(var i = 0; i< len; i++){            if(bpRequestURIs[i]!=null && bpRequestURIs[i]!= " "&& oSession.uriContains(bpRequestURIs[i]) ){                    oSession["x-breakrequest"]="uri";            }        }

完成,这样就完成了!

你明白了吗,如果有不明白的地方,可以给我留言呢?我一定会在第一时间回复你 * - * |||

1 0