Fiddler实践心得

本文章转载于搜狗测试

一、打断点和AutoResponder返回404/502等状态码的不同

之前一直以为这两种方式没有区别,都是阻断了请求,改变了返回结果。但是今天在测一个问题时,恍然间明白了两者的不同。

1、打断点,是阻塞了请求,一直没有结果返回,请求将在线程中一直存在,直到超时被踢出来。

2、AutoResponder返回404/502,这种情况是有结果返回的,代表请求也结束了,不会在线程中一直存在。

线程,细心的朋友可能发现了,线程,是的,在遇到线程相关的问题时,两者就明显的不同了。

其实在发现两者在线程上的不同之后,再仔细思考这个问题,两者本质上是服务器是否响应的问题,是否有状态码的问题。打断点阻塞,没有状态码,服务器是没有响应。404/502是服务器有响应的。体现中线程中的不同,只是一个症状体现而已。

二、修改Response数据时要注意超时的问题

通过设置Rules -> Automatic Breakpoints ->After Response,之后再修改响应回来的数据,来实现修改response的内容。但是这样修改数据很容易造成另外一个问题,那就是请求超时导致客户端不对请求做处理。

怎么理解呢? 就是客户端发送一个请求出去,如果在指定的时间内请求没有返回,则认为该请求超时了,就算以后这个请求返回数据,则客户端也不再对请求做出响应。

如果,修改内容的操作能够很快的进行,放行断点,在超时时间之内完成,那么修改之后的内容将会被客户端处理。

如果,修改内容的操作大于超时时间,就算之后将断点放行,请求返回200,这个时候客户端是不做任何处理的,也可以理解为修改的内容没有产生效果。

综合上述,一定要注意修改内容的操作时间和超时时间的关系。

其实在修改数据的时候,不太容易去把控时间的长短,也很容易造成修改数据失误,那么怎么样才能很好的解决这个问题呢?

可以用AutoResponder自动响应数据,用本地文件替换服务器的返回数据。这样就不用在打断点之后急忙的修改数据,也不怕一不小心把数据修改错了。AutoResponder功能替换是一瞬间的事儿,也不用担心超时的问题,真的是一举两得啊。

三、重新认识Decode

在之前的认识中,知道有这样的Decode在工具栏中,也知道是解密的,但是在实践中并没有涉及到这块,今天就被我碰到了,而且自己也跳到坑里了,还好还好最后终于明白了。

Decode在平时默认是被选中的,我不知道什么时候就给取消了。

今天的情况是这个样子的:

客户端请求一个接口的数据是加密的,通过save -> response -> response body ,将返回结果保存下来,之后用这个本地文件替换服务器返回的数据。结果客户端接到数据之后,在后台报了一个错误,提示数据格式不对。

正常的业务流程是客户端在接到数据之后,需要对数据进行解密。现在是在对数据解密的时候发现数据格式不对。

保存下来的response body,如下所示:

服务端一阵排查问题,客户端一阵排查问题,没毛病啊!!!最后问我,你的本地文件内容是什么?我把内容贴出去之后,大家都是很疑问 6 、0 是怎么回事?

服务端说不是我们返回的,客户端说不是我们添加的。

OH MY GOD ! 我也急了,怎么可能是我这里的问题,平时都是这样用本地文件替换服务器文件的,没毛病啊!

后来仔细瞅了瞅,发现了 Response body is encoded ,Click to decode . 点了一下,哦~~~顿时豁然开朗。

第一行和最后一行是数字,其实是对数据failed加的密,虽然看起来是明文,6是数据failed的长度。

应该也看到Response body is encoded. Click to decode. understand ? 点击一下就可以解密了。

解密之后的数据,如下所示:

这个时候再save -> response -> response body ,将返回结果保存下来,AutoResponder替换服务器文件,客户端就可以正常的解密运行了。

问题虽然是解决了,但是得找到真正的原因啊?

提到解密,当然是第一时间想到了Decode,一看,居然没有被选中,突然间就明白了Decode的作用,如果返回的数据时加密的,就自动解密。

为了验证,选中Decode,又重新请求了一次,结果你猜怎么着,还真的是这个道理。

细节决定成败啊,任何一个小功能都不能被忽视啊!盆友们啊,都要慎重啊,慎重!

四、bpu 阻塞多个请求

背景:

今天同事问我,bpu怎么同时阻塞多个请求呢?

同事 :

我是这样写的 bpu a b ,我这样写怎么实现不了同时阻塞a 和 b 请求呢?

我:

我没有这样阻塞过,但是在我的理解里应该这样写,bpu a enter执行,bpu b enter执行,分开执行(因为我之前没有这样阻塞过,只是按照自己的理解这样认为的,接下来就打脸了,不都是你以为的就是你以为的啊,泪奔啊)。

同事:

我按照你说的方式做了,但是还是不可以啊。

额~,好尴尬啊

我只有默默的打开Fiddler,ctr+R打开脚本,ctr+F 输入关键字 bpu,找到bpu命令所在的核心代码

case "bpu":

var len = sParams.Length ;

if(sParams.Length<2){

bpRequestURI=null; FiddlerObject.StatusText="bpRequestURI breakpoint cleared";

return false;

}

var len = sParams.Length ;

bpRequestURI= sParams[1];

FiddlerObject.StatusText="RequestURI breakpoint for "+sParams[1];

return true;

核心: bpRequestURI= sParams[1]; 只取了一个参数值。

场景1解析(也就是同事的执行方法): bpu /sdk /zwf ,

使用空格隔开的,那么

sParams[0] = “bpu”

sParams[1] = “/sdk”

sParams[2] = “/zwf”

只取了sParams[1] = “/sdk”,所以只会阻塞包含/sdk的请求

场景2解析(也就是我认为的方法,允许我哭一会):

bpu /sdk

bpu /zwf

每次执行bpRequestURI,都会被赋新值,所以我阻塞包含/zwf 的请求

我们怎么样才可以实现,阻塞多个请求呢?

让我沿着核心代码,顺藤抹瓜,ctr+F 输入关键字 bpRequestURI 查询,找到参数定义的地方

这个是定义变量的地方,是全局变量

//在main()方法中

// These static variables are used for simple breakpointing & other QuickExec rules

BindPref("fiddlerscript.ephemeral.bpRequestURI")

publicstaticvarbpRequestURI:String=null;

找到使用此参数,bpRequestURI 不为null,并且 请求的uri 包含bpRequestURI ,则阻断该请求

if((null!=bpRequestURI) && oSession.uriContains(bpRequestURI)) {

oSession["x-breakrequest"]="uri";

}

这样捋下来,就搞明白了,阻塞请求是怎么个原理了,是不是也很简单呢?!

接下来就是改造它来实现bpu 阻塞多个请求了。

第一步:

//在main()添加如下代码

BindPref(“fiddlerscript.ephemeral.bpRequestURI”)

//数组的长度10,10个阻塞的命令,内容为空格,和bpu命令用空格分割保持一致

public static var bpRequestURIs:String[] = [” “,” “,” “,” “,” “,” “,” “,” “,” “,” “] ;

第二步:

case"bpu":

varlen1 = sParams.Length ;

varlen2 = bpRequestURIs.Length;

//每次赋值之前先恢复原始值

for(vari =0; i< len2; i++){

bpRequestURIs[i]=" ";

}

if(len1 <2) {bpRequestURI=null; FiddlerObject.StatusText="RequestURI breakpoint cleared";returnfalse;}

vartext ="";

for(vari =1; i < len1; i++){

bpRequestURIs[i-1] = sParams[i];

text += sParams[i] +" ";

}

FiddlerObject.StatusText="RequestURI breakpoint for "+ text;

returntrue;

第三步:

// 在OnBeforeRequest() 方法中

// 注释掉之前的方法

//  if ((null!=bpRequestURI) && oSession.uriContains(bpRequestURI)) {

//      oSession["x-breakrequest"]="uri";

//  }

varlen= bpRequestURIs.Length;

for(vari =0; i

if(bpRequestURIs[i]!=null && bpRequestURIs[i]!=" "&& oSession.uriContains(bpRequestURIs[i]) ){

oSession["x-breakrequest"]="uri";

}

}

完成,这样就完成了bpu同时阻塞多个请求了!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,656评论 18 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,970评论 6 13
  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 6,332评论 0 6
  • 2016.10.21 I'v just watched The mechanic. Chen siran and ...
    Land1996阅读 190评论 0 0
  • 窗前有一颗青色的小草 独一无二的 那是我 它向着太阳 我给自己取名叫做青 青清而透亮 对面的小河旁 还有远方的黄土...
    杨念桥阅读 200评论 0 2