因为项目中有一个需求,就是SessionId是否过期,如果过期就需要用户重新登录。有限期是半个小时,超过半个小时,后台哥们就会返回403。所以我需要做的就是拦截网络请求。提前获取Response,并对网络状态码进行判断。如果403,就调登录接口,获取最新SessionId,然后重新发起请求。
代码有点乱,大家凑合看0.0
下面是我定义的网络拦截器
private GlobalHttpHandler mHandler;
public RequestIntercept(GlobalHttpHandler mHandler) {
this.mHandler = mHandler;
}
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Buffer requestbuffer = new Buffer();
if (request.body() != null) {
request.body().writeTo(requestbuffer);
} else {
Timber.tag("Request").w("request.body() == null");
}
if (mHandler != null)//在请求服务器之前可以拿到request,做一些操作比如给request添加header,如果不做操作则返回参数中的request
request = mHandler.onHttpRequestBefore(chain, request);
//打印url信息
Timber.tag("Request")
.w("Sending Request %s on %n Params ---> %s%n Connection ---> %s%n Headers ---> %s", request.url(), request.body() != null ? requestbuffer.readUtf8() : "null", chain
.connection(), request.headers());
long t1 = System.nanoTime();
Response originalResponse = chain.proceed(request);
long t2 = System.nanoTime();
//打赢响应时间
Timber.tag("Response").