0x01.Why?
做移动测试的同学经常会在app和server中间架设一个代理(例如charles或者fiddler等),由经代理,app和server之间的交互及交互内容变得可视化,使得我们不再摸黑测试。事实上,能够很好的掌握app和server端的交互不仅对于测试,对于开发,对于产品的整个质量提高都是有非常大益处的。但是,有些场景下,架设代理变得不易,或者难于满足要求,举几个例子:
想要找出正常用户使用时候,哪些场景最耗流量(你不能让用户挂代理,如果有针对网络流量的优化,挂代理也看不出问题来)。
想要找出请求的各种接口中,哪些服务不稳定,如间歇出现4xx或者5xx错误,这需要统计大量的数据,单一客户端挂代理是做不到的(当然服务端监控如果做得好也能实现)。
想要找出某些特定条件下(如弱网,网络切换等)客户端自己产生的请求错误或者超时等等。
想要查看一些特殊场景下接口是否会发生重复调用,错误调用序列。这些issue往往藏的很深,不易出现。这时候往往需要分析日志的pattern来把问题揪出来,这时候你就会发现,代理软件做日志分析很麻烦,也要导出来专门分析,而且总挂着代理极为不方便(至少不能切换网络,日志也要根据app做筛查,因为一般都是全流量截取)。
这时候需求就变成了:最好在app内部能够截取所有的HTTP/HTTPS流量,以某种方式保存下来,并且能够以某种方式传递给需要用这些数据的人。这其实是一种APM(Application Performance Monitoring)的概念,国外最早已经有人实现了这种功能,如 newrelic https://newrelic.com/ 国内也有一些类似的厂商了。
0x02. How?
先想一下我们每天都在使用的代理工具是如何实现的呢?代理工具会拦截所有的http的请求,记录下我们需要的信息后替代客户端重新发送相同的请求给服务端;拦截返回,记录下想要的东西后返回给客户端。如果JAVA写的多,你可能看到过各种 interceptor 来截取流量。OKHttp的作者介绍这款被广泛应用的http client的时候曾经说过:OKHttp只不过是请求和响应之间做了一堆interceptor而已。
延伸阅读
- ssh框架 2016-09-30
- 阿里移动安全 [无线安全]玩转无线电——不安全的蓝牙锁 2017-07-26
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 论文笔记【图片目标分割】 2017-07-26
- 词向量-LRWE模型-更好地识别反义词同义词 2017-07-26
- 从栈不平衡问题 理解 calling convention 2017-07-26
- php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明 2017-07-26
- Swift实现JSON转Model - HandyJSON使用讲解 2017-07-26
- 阿里移动安全 Android端恶意锁屏勒索应用分析 2017-07-26
- 集合结合数据结构来看看(二) 2017-07-26