该工具是基于开源http代理服务器:littleProxy的框架基础上做的,我大致看了该框架的介绍,运用了netty的网络库,因此性能方面还是挺稳定的,也比较方便整合到我的工具里面,并且作者还将该框架与市面上其他代理服务器分别做了压测,从他的测试数据方面看还是很可观的,git地址:https://github.com/adamfisk/LittleProxy
当初考虑的就是从代理服务器中拿到服务器的response进行修改,而LittleProxy正好也提供了这样的接口给我们,实现方面也比较简单,具体就是启动http server的时候追加一个过滤监听器,在过滤部分里面实现接口篡改部分。
篡改规则从本地的json文件中读取,程序启动的时候会事先加载到内存里面,该文件其实是一个json数组,类似于这样:
[
{
"path": "/api/v1/merchants",
"method": "get",
"response": {
"code": "200",
"message": ""
}
},
{
"path": "/api/v1/merchant_audits",
"method": "get",
"response": {
"code": "200",
"message": ""
}
}
]
这示例里面写了2个规则,每个规则里面包含path,method,response,代码里面将path和method存放到一个KeyPair对象里面,最终数据的存储方式是一个Map<KeyPair, reponse>的方式,然后与过滤器里面获取到的KeyPair进行比对,比对成功的话会将该对应的response篡改掉,达到实现篡改目的。如果过滤器里面KeyPair没有比对成功,服务器原来的响应消息不会做任何修改,会将原有response透传给客户端。
用maven打成jar包,执行jar即可,手机修改一下代理服务器地址,监听端口9911(可在程序里面修改)即可测试手机app,web的话只需要修改一下浏览器http代理即可。目前有两种模式
- CAPTURE_MODE,抓包模式
java -jar httpproxy-1.0-SNAPSHOT.jar 0 data.json
- FIDDLE_MODE,篡改模式
java -jar httpproxy-1.0-SNAPSHOT.jar 1 data.json
- 每个篡改规则加入sleep字段,即等待多久之后将response返回给客户端
在CRM遇到过这样一个问题,部分接口响应如果发生延时情况下,页面上部分按钮仍可点击,会导致跳转页面里面很多按钮clickable 属性为disabled情况,可一定程度上用于模拟网络延时情况
- 加入标准的Http响应状态码,模拟各个状态码下app或者web是否有异常