通过FiddlerScript修改request

static function OnBeforeRequest(oSession: Session){
        if(oSession.fullUrl.Contains("/api/grab/review")){//判断session的url是否包含“/api/grab/review”
            var body =  oSession.GetRequestBodyAsString();//抓包,以字符串的形式获取request的内容
            var result = GetRequestBodyAsHashTable(body);//调用GetRequestBodyAsHashTable方法,将string转换为hashtable,以便于编辑
            if(result.Contains("score")){//如果body中含有“score”字段
                result.Remove("score");//将score字段删除
            var resultStr = GetRequestAsString(result);//将修改后的hashtable容器拼接成字符串
            oSession.utilSetRequestBody(resultStr);//将拼接好的字符串设置回session中的request里去 

        }
}

以上脚本中,有两个方法需要我们自己写,一个是GetRequestBodyAsHashTable(),一个是GetRequestAsString()。反正我是没有在Fiddler里找到现成的方法,所以自己写了这两个工具方法,具体脚本见下:

//将hashtable类型的requestbody拼接成字符串,并返回给调用者
    static function GetRequestAsString(request: System.Collections.Hashtable) {
        var resultStr : System.Text.StringBuilder = new System.Text.StringBuilder("");//申明一个字符串容器
        var count : int = 0;//用于判断拼接“&”字符的时机
        for(var key : String in request.Keys){//循环遍历hashtable中所有的键值对中的键
            if(count != 0){//如果是循环中第一个,不拼接“&”,否则拼接“&”
                resultStr.Append("&");
            }
            resultStr.Append(key).Append("=").Append(request[key]);//拼接键值对

            count++;//计数+1
        }        
        return resultStr.ToString();          
    }

 

 

//将request的字符串转化为hashtable,并返回给调用者
static function GetRequestBodyAsHashTable(request: String) {
    var requestHashTable : System.Collections.Hashtable = new System.Collections.Hashtable();//申明一个hashtable容器

    if(!request.Equals("")){//判断若字符串不为空
        if(request.Contains("&")){//字符串包含“&”字符(说明不止一个参数)
            var requestList = request.Split("&"); //以“&”为刀印进行切割

            for(var i = 0; i < requestList.Length; i++){//循环出所有的参数

                var keyValuePair = requestList[i].Split("=");//以“=”为刀印进行切割

                requestHashTable.Add(keyValuePair[0], keyValuePair[1])//将参数及参数对应的值装进hashtable容器                   
            }
        }else{//只有一个参数时的处理     
            var keyValuePair = request.Split("="); 
            requestHashTable.Add(keyValuePair[0], keyValuePair[1])

        }
    }
    return requestHashTable;
}

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注