项目背景:
近期在做一款app测试,为保护用户隐私,客户端对请求进行整体加密后再发送,途径加密墙服务器进行解密,再发送给指定服务器,逻辑简图如下:
测试过程:
我们需要对功能进行容错测试,修改返回的response;
需要进行网络测试,对请求进行delay延时;
需要进行代理测试服务器,给真实请求配置ip。
以上这些操作都需要针对该功能的明文请求进行操作,但客户端发出来的加密请求,我们无法解密,阻碍了测试进行,怎么办呢?
解决问题:
我们平时测试明文请求时,只需要给客户端连接fiddler代理就可以对请求进行操作处理了,那么我们是不是可以给加密墙服务器配置fiddler呢?在开发大佬帮助下,给出了如下方案:
目的:
在加密墙服务器和目标服务器之间搭设fiddler,通过该fiddler进行数据查询、修改等操作;
操作步骤:
在客户端和加密墙服务器之前搭设fiddler;
在fiddler中通过urlreplace将域名后面拼接当前fiddler的ip和端口号;
加密墙服务器修改nginx配置,将该类请求的明文请求发送到对应ip+端口号的fiddler服务器上;
fiddler再将解密后的请求发送到对应的线上服务器。
我们这里主要讨论下步骤b中的操作
Fiddler修改请求有两种方法:
1、 在fiddler命令行输入:
urlreplace xxxx.com xxxx.com/jiemi?ip=a&port=b |
2、 在FiddlerScript中,找到OnBeforeRequest方法,在其尾部添加代码如下:
If(oSession.url.indexOf(‘xxxx.com’)>-1){ oSession.url = oSession.url.Replace(‘xxxx.com’,’xxxx.com/jiemi?ip=a&port=b’) } |
第一种方法只有当次启动fiddler有效,重新启动后就会失效,而第二种方法会一直生效。
到这里问题就全部解决了,但是leader看过后立刻提出了几个改进点,其中一个是replace的时候ip值是不是可以变成动态获取,而不是需要每个人手动添加呢。
这样我们就要继续分析下FiddlerScript了,下面通过三个问题来进行分析:
一、FiddlerScript是用什么语言编写运行的?
通过网上调查了解到FiddlerScript的编码是C#,C#支持的系统库它也支持。
二、FiddlerScript有哪些语法?
上面说到C#支持的系统库FiddlerScript也都支持
同时FiddlerScript自身提供了一些库,在ScriptEditer右侧可以看到库及相应方法:
获取本机IP的方法需要调用System.Net.Dns.GetHostEntry()的方法
三、如何进行代码调试?
JAVA有log.d(),Python有print (),同样Fiddler也有调试方法:
FiddlerObject.log()
使用方法如下:
import System.Net; var hostname = Dns.GetHostName(); var iphost = Dns.GetHostEntry(hostname).AddressList[1]; FiddlerObject.log(iphost); } |
配置完毕后,在fiddler的右侧tab:log中查看调试结果。
本次分享就到这儿,希望对大家使用Fiddler进行测试的过程有所帮助。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理