模拟场景: 脚本实现阻塞请求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 是JScript 的脚本文档,我们可以用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);
模拟场景: 脚本实现阻塞请求A,等待N秒之后,自动放行请求A因为项目的业务逻辑,需要模拟这样的场景,刚开始我也很纠结郁闷,觉得无从下手,还不如手工来的快一些,因为涉及到时间,又不敢保证每次手工操作的准确性。没办法,只能硬着头皮啃这个大难题,后来我就把这个问题一步步拆解,化繁为简,之后再逐渐攻克每一个难点,这样就在不知不觉中解决了这个疑难杂症。思路: 第一问: 如何让请求阻塞呢?之前都是在界面上执行命令,bpu *** ,bpafter ** ,怎么用脚本来实现遇到请求A就自动拦截呢?这个我们
5、对APP进行弱网测试
fiddler工作原理
fiddler是浏览器和服务器之间的代理服务器,能够捕获通过fildder的http(s)请求。fiddler启动后会自动设置代理地址为本机,端口号为8888。
客户端像WEB服务器发送HTT...
Fiddler在处理每个session时,脚本文件CustomRules.js中的方法都会运行,这些脚本可以使你任意修改复杂的session。通常,使用的比较多的都是用脚本来修改请求或响应
两个重要的函数
OnBeforeRequest
请求经过
Fiddler发送给服务器之前会先调用这个函数,因此,如果想要修改请求,可以写在这个函数里
OnBeforeResponse
FiddlerScript 是Fiddler 的一项非常强大的功能,它允许你扩展Fiddler UI,添加新的特性,修改请求与响应内容等。
FiddlerScript 基于JScript.NET 语言。
某测试项目X中有用线上包来进行测试环境测试的需求。
重定向线上环境到测试环境。
1、若重定向仅涉及少量url,可以通过配置本地host,或者使用抓包工具charle...
用Fiddler构造http请求时,发现 $_POST数组中怎么也获取不到值,以为自己操作错了,但也没发现什么问题,后来得知,原来缺少了一个请求头,Fiddler不会为我们自动添加。
Content-Type: application/x-www-form-urlencoded
下面以bugku的web基础$_POST30为列子进行分析!
看到是post请求,就想到构造http的post请求...
身为一名前端搬砖工,长久以来有两个问题困扰着我,一个是做后台项目接口返回的数据都为空,不方便做更进一步的对数据的查改及测试;另一个是做移动端的项目,比如 uniapp,每次遇到接口问题都只能 console 在 HBuilder 进行调试,苦不堪言,后来发现我司 TE 同学用 Fiddler 进行抓包测试,一问这软件还是免费的,遂进行了一番学习了解,发现可以直接解决刚刚提到的这两个问题,所以在这里做个分享。
Fiddler 是位于客户端和服务器端的 HTTP 代理
目前最常用的 HTTP .
该函数使用了一个循环来不断地除以2,直到十进制数为0为止。在每次循环中,我们可以通过使用模运算来得到当前位上的二进制数字,并将其添加到二进制字符串的左侧。最后,返回得到的二进制字符串即可。
例如,将16转换为二进制数,可以这样调用该函数:
```python
binary = decimal_to_binary(16)
print(binary) # 输出 10000
老司机6517: