一、打断点和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呢,千万不要以为你以为的就是你以为的,跳过坑才会明白更多,其实我们的哪一次成功,不是在跌倒之后爬起来的呢!