玩转Fiddler 第一节 实践出真知

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

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

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

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

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

敲黑板知识点

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

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

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

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

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

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

敲黑板知识点

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

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

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

三、修改request的body

在该教程中有讲如何修改request的body,明白了原理,但是在实际的应用在还是会遇到一些问题,最主要的是脚本语法的问题,使用什么样的方法,等等,看来理论一定要和实践相结合啊!!!

今天我就遇到了需要修改request的body,要修改什么方法,使用什么方法,在代码中都可以看到,没有什么技巧而言,而是必须要这样,这是规定,代码很简单,看代码吧~

static functionOnBeforeRequest(oSession: Session) {

      //在OnBeforeRequest中增加以下代码

      if(oSession.uriContains("/decipher/clickUpload")) {

      oSession["ui-color"] = "green";

        //获取request中的body字符串

        varstrBody = oSession.GetRequestBodyAsString();

        strBody = "修改后的body内容 ";

        oSession.utilSetRequestBody(strBody);

        }

}

四、重新认识Inspectors->WebForms、TextView、SyntaxView选项展示的数据

事情是这个样子的:

1、在进行接口参数核对的时候,通过WebForms中看到了4个参数,但是接口文档上却写的5个参数,顿时很高兴啊,这么粗心的开发,我得拎出来好好的说道说道了。


2、结果,我们的开发欧巴,说那是加密的参数,你是看不到的。什么?Fiddler工具这么强大,只要是你客户端发出去的请求没有它捕捉不到的。况且,就算是加密了,也是需要通过HTTP协议发送的,都可以捕捉,没毛病吧。

3、但是开发说的那几个加密的参数,的确是在WebForms中没有找到,但是我不认为应该是这个样子。

找原因:

1、之前一直以为TextView ,SyntaxView、WebForms、Raw、JSOn等选项展示的内容是一样的,只是不同的数据格式而已。

2、有了这个以为,也不会去刻意的留意这些。

**在我们的世界里,总是有很多,你以为你以为的就是你以为的!!!**

而这次,偏偏就让我明白了这个道理。在切换查看数据的时候,TextView、SyntaxView 的确是密文(如下图所示),而WebForms怎么是明文呢?


问开发要了解密的方法,解密之后(如下图所示), 的确是接口文档上规定的5个参数。


解密之后足以证明: 1. 就算参数是加密的,Fiddler也是可以捕捉到的

但同时又抛出了另外一个问题:为什么WebForms却是明文呢?

分析:

是否是 Fiddler自动解密的?

1.Fiddler不知道秘钥

2. 就算是它解密的,明明是5个参数,为什么只解密了4个参数呢

所以,排除了这种可能性,接着找原因……

仔细观察该接口的url:http://1.192.158.9:22080/decipher/taskDataSend?sdk_version=3.1&platform=android&app_version=1.0&app_name=com.altamob.android.sdkdemo.fan

?之后的4个参数,跟webforms的4个参数一致。

难道webforms并不是展示request的body信息,而是展示url中的参数?

为了验证这一点,找到了另一个接口,url:http://api.altamob.com/adserver/v1/promote/ads/sdk/v4 这个url之后没有跟参数,那么webforms呢?是空白的


这个接口是有参数发送的,查看syntaxview,这的确是request发送的body数据:


再来看这张图:


webForm 分上下两个框,第一个框是Query String,第二个框是Body,细心的你有没有发现在body中展示的是加密的请求体。综合上述,也很容易推断出QueryString中展示的是请求URL后面跟着的参数。

需要强调的是,此时请求的Content-Type必须为application/x-www-form-urlencoded 才会在webforms中展示数据。

The End:

SynTaxView、TextView 是展示body信息的,请求体、响应体。

你有没有像我一样重新认识了Inspectors->WebForms、TextView、SyntaxView呢,千万不要以为你以为的就是你以为的,跳过坑才会明白更多,其实我们的哪一次成功,不是在跌倒之后爬起来的呢!

你可能感兴趣的:(玩转Fiddler 第一节 实践出真知)