public class LoggingInterceptor implements Interceptor {
private static final String TAG = "LoggingInterceptor";
@Override
public Response intercept(Chain chain) throws IOException {
//拦截链对象
Request request = chain.request();
//String.format 格式化字符串
//String.format("发送请求地址:%s%n请求头:%s",request.url(),request.headers())
//String format:格式,
// Object... args: 可变参数,可以理解成集合
//%s:占位符,后面的参数是string
//%n:换行
//%d:占位符,通过数字类型的值替换
//发送请求地址:url 换行 请求头:request.headers()
Log.d(TAG, String.format("发送请求地址:%s%n请求头:%s",request.url(),request.headers()));
//System.out.println();
//获取当前时间的毫秒值
long startTime = System.currentTimeMillis();
Log.d(TAG, "intercept: "+startTime);
//递归+循环的方式把所有的拦截器串联起来,并获取响应结果
Response response = chain.proceed(request);
long endTime = System.currentTimeMillis();
//这里不能直接使用response.body().string()的方式输出日志
//因为response.body().string()之后,response中的流会被关闭,程序会报错,我们需要创建出一
//个新的response给应用层处理
ResponseBody responseBody = response.peekBody(1024 * 1024);
Log.d(TAG, String.format("耗时:%s%n收到来自:%s的结果:%n%s",(endTime- startTime)+"ms",response.request().url(),responseBody.string()));
return response;
}
}
复杂拦截器
最新推荐文章于 2023-06-17 21:41:54 发布