前言
在平时开发中,你有没有下面这样的困扰呢?
场景一
明明是服务端的接口数据错误,而QA(测试)第一个找到的可能是客户端开发的你,为什么这个页面出现错误了?
而作为客户端开发的你,可能要拿出测试机连上电脑,打一下Log,看一下到底返回了什么数据,导致页面错误。
或者高级一点的QA,会自己打Log或者连接抓包工具看一下服务端返回的具体数据,然后把Bug提给对应的人,而大多数公司的业务测试,都仅仅是测试业务,不管技术层的。我司的大部分QA,属于外派来的,一般也只测试业务,每次有问题,都先找客户端。
场景二
你现在正在外面做地铁,产品或者你领导突然给你反馈,你之前做的那块业务,突然线上跑不起来了,不行了。你一想,这肯定是服务端的问题啊,但是怎么证明呢?
场景三
服务端上个线,每次都需要客户端加班配合,说有问题,可以及时帮助排查问题。
推荐一个小工具
说了这么多,就是缺少一个端上的抓包小工具,来查看服务端的数据是否有问题,今天推荐的是一个基于OKHttp的抓包工具。 部分截图如下
支持功能
- 自带分类接口
- 抓包数据以时间为纬度,默认存储到手机缓存下 /Android/Data/包名/Cache/capture/ 下
- 支持Http/Https协议的抓包,分类请求方式/请求URL/请求Header/请求体/响应状态/响应Header/响应体
- 支持一键复制对应的状态
- 响应体如果是JSON,支持自动格式化
- 抓包数据,默认缓存一天
Github地址
代码已经托管到Github 地址:https://github.com/DingProg/NetworkCaptureSelf
快速接入
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
dependencies {
debugImplementation 'com.github.DingProg.NetworkCaptureSelf:library:v1.0.1'
releaseImplementation 'com.github.DingProg.NetworkCaptureSelf:library_no_op:v1.0.1'
}
在你的全局OkHttp中添加 Interceptor
new OkHttpClient.Builder()
.addInterceptor(new CaptureInfoInterceptor())
.build();
原理及涉及知识详解
作为Android开发,说到OKHttp的Interceptor,肯定熟悉不过了。那么你对 Interceptor 又了解多少呢?你都使用过那些OKHttp的 Interceptor呢?
我们先来看一下最近滴滴很火的哆啦A梦
DoraemonKit
长下面这个样子
其中关于网络模块OK Http的监听如下
OkHttpClient client = new OkHttpClient().newBuilder()
//用于模拟弱网的拦截器
.addNetworkInterceptor(new DoraemonWeakNetworkInterceptor())
//网络请求监控的拦截器 ,用于网络流量监听等
.addInterceptor(new DoraemonInterceptor()).build();
这里举例说一下弱网模拟
弱网模拟
看一下他的实现代码
public class DoraemonWeakNetworkInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
if (!WeakNetworkManager.get().isActive()) {
Request request = chain.request();
return chain.proceed(request);
}
final int type = WeakNetworkManager.get().getType();
switch (type) {
case WeakNetworkManager.TYPE_TIMEOUT:
//超时
final HttpUrl url = chain.request().url();
throw WeakNetworkManager.get().simulateTimeOut(url