中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

玩轉Fiddler腳本

發布時間:2020-07-27 01:50:34 來源:網絡 閱讀:2789 作者:wx5901bdf5239f8 欄目:移動開發

這篇文章是給搜狗測試公眾號投稿的,沒想到落榜了,還是寫在自己的博客吧,畢竟我覺得這個是滿滿的干貨

模擬場景: 腳本實現阻塞請求A,等待N秒之后,自動放行請求A
因為項目的業務邏輯,需要模擬這樣的場景,剛開始我也很糾結郁悶,覺得無從下手,還不如手工來的快一些,因為涉及到時間,又不敢保證每次手工操作的準確性。沒辦法,只能硬著頭皮啃這個大難題,
后來我就把這個問題一步步拆解,化繁為簡,之后再逐漸攻克每一個難點,這樣就在不知不覺中解決了這個疑難雜癥。

思路: 第一問: 如何讓請求阻塞呢?

之前都是在界面上執行命令,bpu * ,bpafter ,怎么用腳本來實現遇到請求A就自動攔截呢?這個我們就要深挖在界面上【QuickExec box】執行命令之后的秘密了。
在CustomRules.js文檔中,會發現如下的代碼:

    // The OnExecAction function is called by either the QuickExec box in the Fiddler window,
    // or by the ExecAction.exe command line utility.
    static function OnExecAction(sParams: String[]): Boolean {
    ......
    //取數組的第一個值,第一個值存放的是執行的命令
    var sAction = sParams[0].toLowerCase();
        switch (sAction) {
            case "bpafter":
                var len = sParams.Length ;
                //如果sParams 長度小于2,也就意味著bpafter后面沒有跟url,那么就清空bpafter 阻塞的url,下次再遇到此url 就不會再阻塞了
                if (sParams.Length<2) {bpResponseURI=null; FiddlerObject.StatusText="ResponseURI breakpoint cleared"; return false;}
                var len = sParams.Length ;
                //取數組的第二個值,第二個值存放的是要截取的url
                bpResponseURI = sParams[1]; 
                FiddlerObject.StatusText="ResponseURI breakpoint for "+sParams[1];
                return true;
        }
    ......
    }

OnExecAction 這個函數就是在界面上執行命令所調用的函數,sParams 是將輸入的內容用空格分割而成的數組。
例如,bpafter /altamob/zwf ,那么 sParams[0] = "bpafter" ; sParams[1] = "/altamob/zwf" ;
明白了這個操作的原理,如果想阻塞某個請求,只要調用此函數就可以了。

    if (oSession.uriContains("A")){
            oSession["ui-color"] = "purple";
            var command1:String[] = ["bpafter","/altamob/zwf"];
            OnExecAction(command1);
    }

第二問:如何讓等待N秒呢?
CustomRules.js 是JS 的腳本文檔,我們可以用jS來實現此功能,這個是很常見的代碼。

    static function sleep(numberMillis) { 
        var now = new Date(); 
        var exitTime = now.getTime() + numberMillis; 
        while (true) { 
            now = new Date(); 
            if (now.getTime() > exitTime) 
                return; 
        } 
    }

單位是ms,等待2s中,sleep(2000); 這樣調用即可
第三問:如何自動放行呢?
go 命令是放行所有被中斷的會話。關鍵是在哪一步執行此命令呢?
發現了這樣一個被注釋掉的函數

// This function executes after Fiddler finishes processing a Session, regardless
// of whether it succeeded or failed. Note that this typically runs AFTER the last
// update of the Web Sessions UI listitem, so you must manually refresh the Session's
// UI if you intend to change it.
    static function OnDone(oSession: Session) {
    }

看上面的注解,This function executes after Fiddler finishes processing a Session, regardless of whether it succeeded or failed,
不管一個session 成功或者失敗,在fiddler 結束處理這個session之后,這個函數就會被執行。我的英文翻譯真的是很爛,但是意思是這么個意思,
就是處理完一個session,肯定會調用此函數。那么在此函數中將阻塞放行就ok了。

    static function OnDone(oSession: Session) {
            if (oSession.uriContains("A")){
                sleep(1000);
                var command1:String[] = ["go"];
                OnExecAction(command1);
            }   
    }

【相關書籍:Fiddler抓包讓數據無處可藏】https://yuedu.baidu.com/ebook/52dc548fe109581b6bd97f19227916888586b950
【相關書籍:玩轉Fiddler】https://yuedu.baidu.com/ebook/2a08ad280a4e767f5acfa1c7aa00b52acfc79cd5

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

城步| 温宿县| 会理县| 清徐县| 太原市| 玉龙| 垫江县| 郸城县| 泽州县| 化隆| 太原市| 通城县| 大兴区| 奉贤区| 萨迦县| 鹿泉市| 郎溪县| 桐乡市| 封开县| 平南县| 马关县| 韩城市| 景洪市| 新宁县| 石台县| 潞城市| 长白| 屏南县| 凌海市| 长丰县| 延川县| 榆林市| 定日县| 梁山县| 太原市| 肃北| 普兰店市| 漯河市| 安吉县| 五指山市| 区。|