Android OkHttpClient 日志打印
OkHttpClient 打印请求日志
网上搜索打印okhttp日志的文章,几乎是一样的答案,用HttpLoggingInterceptor,但是打印排版不理想,多请求时打印混乱,所以看了源码后决定自己写一个排版容易阅读的日志打印
com.blankj:utilcodex
打印日志用了github上很火的框架utilcodex中LogUtils,优点是可以传入多参数打印,懒人必备,打印效果如下图
话不多说上代码
code
public static class RequestInterceptor implements Interceptor {
@NotNull
@Override
public Response intercept(@NotNull Chain chain) throws IOException {
Request request = addRequestHeader(chain.request());
String requestBody = getRequestBody(request);
Response response = chain.proceed(request);
String responseBody = getResponseBody(response);
if (TextUtils.isEmpty(responseBody))
return response;
else {
LogUtils.iTag(HttpParams.HTTP_TAG, request.method(),
request.url(), request.headers(), requestBody, responseBody);
return response.newBuilder()
.body(ResponseBody.create(responseBody, HttpConfig.JSON))
.build();
}
}
private String getRequestBody(Request request) throws IOException {
RequestBody requestBody = request.body();
if (requestBody != null) {
Buffer buffer = new Buffer();
requestBody.writeTo(buffer);
return buffer.readString(Charset.defaultCharset());
}
return null;
}
private String getResponseBody(Response response) throws IOException {
ResponseBody responseBody = response.body();
if (responseBody != null)
return responseBody.string();
return null;
}
private Request addRequestHeader(Request request) {
String token = SharedPreferencesHelper.getCacheObject(App.getContext(),
HttpParams.APP_TOKEN, "", String.class);
Request.Builder builder = request.newBuilder()
.addHeader(HttpParams.CONTENT_TYPE, HttpParams.APPLICATION_JSON)
.addHeader(HttpParams.ACCEPT, HttpParams.APPLICATION_JSON)
.addHeader(HttpParams.PLATFORM, String.format("%s %s",
DeviceUtils.getManufacturer(), DeviceUtils.getModel()));
if (!TextUtils.isEmpty(token))
builder.addHeader(HttpParams.APP_TOKEN, token);
return builder.build();
}
}
关键点
使用OkHttpClient.Builder().addInterceptor(new RequestInterceptor())即可
addRequestHeader为设置请求头部基本参数
getRequestBody获取头部body参数
getResponseBody获取请求返回body参数,调用 responseBody.string()后需要build新response,原response会失效