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会失效

Bye

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值