九、Fiddler中的FiddlerScript如何修改目录、样式、设置断点、HTTP请求(包括cookie、host、header、body)、HTTP响应

前言:之前讲过关于使用断点的方式可以修改请求、修改响应:https://blog.csdn.net/ak739105231/article/details/102742863

现在是使用FiddlerScript的方式,编写脚本进行修改;在FiddlerScript中主要是CustemRule.js;其中,OnBeforeRequest函数在每次请求之前调用;OnBeforeResponse函数在每次响应之前调用;分别在这两个方法中修改请求、响应的值;

备注,在FiddlerScript,都是以oSession作为对象,调取方法,而且都是有提示的;

零、首先,看一下界面

一、Fiddler定制菜单(User-Agents)

Fiddler中,可以模拟各种浏览器;在菜单【Rules -> User-Agents】中,可以看到有很多浏览器可供选择;里面可能没有你需要的,举例:user-Agents中添加iPhone4S  safari;

首先,百度一下iPhone4S  safari的user-Agents;

结果:Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0_1 like Mac OS X; ja-jp) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A306 Safari/6531.22.7

步骤二:在FiddlerScript选项卡中,添加:

RulesStringValue(5,"iPhone4s", "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0_1 like Mac OS X; ja-jp) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A306 Safari/6531.22.7")

再次进入菜单【Rules -> User-Agents】,就可以看到我们刚刚添加的【iPhone4s】;

二、特殊的http请求在Fiddler中特殊显示、特殊设置断点

有时候,我们需要对特别的请求有特别的标注、或者设置断点,通过bpu url的方式设置单个断点可以,但是在这里FiddlerScript可以根据url中包含的特殊字符来设置断点;同时,在 OnBeforeRequest(oSession: Session)函数中,里面有举例sampler;例如使用颜色、字体来对特别的Session进行标注;

//设置颜色:  
if (oSession.uriContains("73910")) {	oSession["ui-color"] = "red";	}

// Sample Rule: Flag POSTs to fiddler2.com in italics(设置斜体)
        if (oSession.HostnameIs("blog.csdn.net") && oSession.HTTPMethodIs("POST")) {	oSession["ui-italic"] = "yup";	}

// Sample Rule: Break requests for URLs containing "/sandbox/"(设置断点)
        if (oSession.uriContains("/api/")) {
           oSession.oFlags["x-breakrequest"] = "yup";	// Existence of the x-breakrequest flag creates a breakpoint; the "yup" value is unimportant(后面的值不重要).
         }

下面截图:

三、修改HTTP请求(cookie、替换host地址、header、body)

3.1   cookie的修改:

if(oSession.uriContains("maoniuchuxing")){
            //1.删除所有的cookie
            
            oSession.oRequest.headers.Remove("Cookie");
            //2.新建cookie
          oSession.oRequest.headers.Add("Cookie","JSESSIONID=f682ff50-e961-428d-bc22-110");
            //3.修改Cookie.不能删除或编辑单独的一个cookie,需要替换cookie字符串
           var oldCookie = oSession.oRequest["Cookie"];
           oldCookie=oldCookie.Replace("cookieName=","ignoreme=");
            oSession.oRequest["Cookie"]=oldCookie;
            //4.全新的cookie
          var newCookie ="iThing";
         oSession.oRequest["Cookie"]=newCookie;
            
           }

注意:上面的内容也可写在OnBeforeResponse函数里面

抓包结果:

3.2 替换host地址:

if(oSession.HostnameIs("xxxx.com")){
            oSession.hostname="www.baidu.com";
            }

如果写在OnBeforeResquest函数里面,直接访问对应的host对应的uri;

上面的内容也可写在OnBeforeResponse函数里面,那样就是下面的截图结果:

抓包结果:

3.3 header的修改

   if(oSession.uriContains('csdn')){
            //添加header
            oSession.oRequest.headers.Add("iThing","ihing");
              oSession.oRequest.headers.Add("iThing111","ihing");
            //删除header
            oSession.oRequest.headers.Remove("iThing111");
            //修改Referer
            oSession.oRequest["Referer"]="www.csdn.net/test";
            }

抓包结果:uri中包含“api”字段的,cookie全部变了:

3.3.1修改referer:

抓包结果:

3.4修改body内容

3.4.1:方式一:

 if(oSession.uriContains("api")){
            oSession.utilDecodeRequest();
            //获取request中的body字符串
            var strBody=oSession.GetRequestBodyAsString();
            //用正则表达式或者replace方法修改string
            strBody=strBody.Replace("article","iThingok");
            //弹个对话框检查下修改后的body
            FiddlerObject.alert(strBody);
            //将修改后的body,重新写会request中
            oSession.utilSetRequestBody(strBody);    
            }

抓包结果:

将其放置在onbeforeresponse()函数中也可替换响应body,只需修改一下里面的方法(如:utilReplaceInRequest,换成utilReplaceInResponse);

3.4.2 方式二(就不截图了):

//直接替换body数据   
if(oSession.uriContains("api")){
            oSession.utilReplaceInRequest("article","iThingok");
            }
        

四、修改HTTP响应(body)

上面的方式其实放到onbeforeresponse()函数中,也可以有不同的效果;下面就简单说一下响应body的方式,也是两种:

   if(oSession.uriContains("api")){
            oSession.utilDecodeResponse();
            //获取request中的body字符串
            var strBody=oSession.GetResponseBodyAsString();
            //用正则表达式或者replace方法修改string
            strBody=strBody.Replace("ok","iThing ok");
            //弹个对话框检查下修改后的body
            FiddlerObject.alert(strBody);
            //将修改后的body,重新写会Response中
            oSession.utilSetResponseBody(strBody);
        }
//直接替换body数据   
if(oSession.uriContains("api")){
            oSession.utilReplaceInResponse("article","iThingok");
            }
        

这里就不分别截图了,只截图一张,抓包结果:

发布了232 篇原创文章 · 获赞 141 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/ak739105231/article/details/103494946
今日推荐