企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] <br> ### FiddlerScript 介绍 FiddlerScript提供了请求/响应过程中的事件接口,通过这些接口,我们可以编写代码,注册自定义逻辑 打开FiddlerScript编辑器 方式一:通过【Rules】->【Customize Rules】 打开Fiddler ScriptEditor 方式二:通过右侧菜单“FiddlerScript”Tab页进入FiddlerScript编辑器 ![](https://box.kancloud.cn/95936bd998f7750aeeaed549a8d9711e_619x655.jpg) 我喜欢通过方式二进行编辑,通过Go to 可以跳转定位到关键的系统方法中。 **FiddlerScript中最关键的两个方法:** - OnBeforeRequest:每次请求之前调用 - OnBeforeResponse:每次响应之前调用 ### 修改请求信息 在OnBeforeRequest函数中,添加代码片段: ```python // 域名替换,将一台服务器的所有请求指向另一台服务器上的同一端口 if (oSession.HostnameIs("www.bayden.com")) { oSession.hostname="test.bayden.com"; } // 域名与端口替换 if (oSession.host=="www.bayden.com:8080") { oSession.host="test.bayden.com:9090"; } // 域名替换, 包含HTTPS传输协议 if (oSession.HTTPMethodIs("CONNECT") && (oSession.PathAndQuery == "www.example.com:443")) { oSession.PathAndQuery = "beta.example.com:443"; } if (oSession.HostnameIs("www.example.com")) oSession.hostname = "beta.example.com"; // 修改host,将域名映射到指定IP if (oSession.HostnameIs("subdomain.example.com")){ oSession.bypassGateway = true; // Prevent this request from going through an upstream proxy oSession["x-overrideHost"] = "128.123.133.123"; // DNS name or IP address of target server } // 将单个页面的请求重新定位到不同的页面,可能位于不同的服务器上。 (通过更改请求的主机头来重新定位) if (oSession.url=="www.example.com/live.js") { oSession.url = "dev.example.com/workinprogress.js"; } // 添加 header oSession.oRequest["NewHeaderName"] = "New header value"; // 阻止发送cookie oSession.oRequest.headers.Remove("Cookie"); //修改请求url if (oSession.uriContains("notice/recover")) { oSession.fullUrl="https://api.test.com/notice/recover?k1=v1&k2=v2" // 修改post请求的boby var strBody=oSession.GetRequestBodyAsString(); // 获取请求中的body字符串 strBody=strBody.replace("1111","2222"); FiddlerObject.alert(strBody);// 弹个对话框检查下修改后的body oSession.utilSetRequestBody(strBody); // 修改JSON参数 if(oSession.fullUrl.Contains("notice/recover")){ var new_data='{"user":"123456","pwd":"ba59be56e0abe10a4957f20fdc39883e","captcha":null}';//更改后的JSON数据 var requestJson=Fiddler.WebFormats.JSON.JsonDecode(new_data); var reJsonDes=Fiddler.WebFormats.JSON.JsonEncode(requestJson.JSONObject); oSession.utilSetRequestBody(reJsonDes); } ``` ### 修改响应信息 在OnBeforeResponse函数中,添加代码片段: ```python // 从响应HTML中查找和替换 if (oSession.HostnameIs("www.bayden.com") && oSession.oResponse.headers.ExistsAndContains("Content-Type","text/html")){ oSession.utilDecodeResponse(); //解码 oSession.utilReplaceInResponse('<b>','<u>'); } // 修改响应boby,如修改Result值1更改为2 if (oSession.uriContains("notice/recover")) { var bobystr = oSession.GetResponseBodyAsString(); bobystr = bobystr.Replace("\"Result\":1","\"Result\":2"); oSession.utilSetResponseBody(bobystr); } // 修改JSON返回值 if(oSession.fullUrl.Contains("notice/recover")){ var reponseJsonString=oSession.GetResponseBodyAsString();//获取JSON字符串 var responseJSON=Fiddler.WebFormats.JSON.JsonDecode(reponseJsonString);//转化为JSON数据,可编辑 var str='{"code":"1"}';//自定义JSON responseJSON.JSONObject['data']= Fiddler.WebFormats.JSON.JsonDecode(str).JSONObject;//转换需要 var myResponseJSON= Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject);//转换需要 oSession.utilSetResponseBody(myResponseJSON);//设置ResponseBody中的JSON数据 } ``` ### 更多 更多信息,请查看官方文档[https://docs.telerik.com/fiddler/KnowledgeBase/FiddlerScript/ModifyRequestOrResponse](https://docs.telerik.com/fiddler/KnowledgeBase/FiddlerScript/ModifyRequestOrResponse) <hr style="margin-top:100px"> :-: ![](https://box.kancloud.cn/331f659e8e6cddb0d9f182e00e32803f_258x258.jpg) ***微信扫一扫,关注“python测试开发圈”,获取更多测试开发分享!***