通过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; }