OkHttp Log Interceptor

retrofit2经常会有gson解析错误,通过输出response body可以很好的查看gson entity定义的错误。

        Interceptor loggingInterceptor = chain -> {
            Request request = chain.request();
            long t1 = System.nanoTime();
            Response response = chain.proceed(request);
            long t2 = System.nanoTime();

            double time = (t2 - t1) / 1e6d;

            if (request.method().equals("GET")) {
                Log.i("Turman","GET\n" + "url->"+request.url()+"\ntime->"+time+"\nheaders->"+request.headers()+"\nresponse code->"+response.code()+"\nresponse headers->"+response.headers()+"\nbody->"+response.body().string());
            } else if (request.method().equals("POST")) {
                Log.i("Turman","POST" + "url->"+request.url()+"\ntime->"+time+"\nheaders->"+request.headers()+"\nresponse code->"+response.code()+"\nresponse headers->"+response.headers()+"\nbody->"+response.body().string());
            } else if (request.method().equals("PUT")) {
                Log.i("Turman","PUT" + "url->"+request.url()+"\ntime->"+time+"\nheaders->"+request.headers()+"\nresponse code->"+response.code()+"\nresponse headers->"+response.headers()+"\nbody->"+response.body().string());
            } else if (request.method().equals("DELETE")) {
                Log.i("Turman","DELETE" + "url->"+request.url()+"\ntime->"+time+"\nheaders->"+request.headers()+"\nresponse code->"+response.code()+"\nresponse headers->"+response.headers()+"\nbody->"+response.body().string());
            }

            return chain.proceed(request);
        };

OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(20,TimeUnit.SECONDS)
                .readTimeout(30,TimeUnit.SECONDS)
                .addInterceptor(loggingInterceptor)
                .build();


Demo:

public class NetWorkManager {

    private static final int RONG_CLOUD_HEAD = 0;
    private static final int COMMON_HEAD = 1;

    private static Retrofit commonClient = null;
    private static Retrofit rongClouldClient = null;

    private NetWorkManager(){}

    public static Retrofit getCommonClient(){
        if (commonClient == null) {
            commonClient = new Retrofit.Builder()
                    .baseUrl(NetContents.BASE_HOST)
                    .client(getHttpClient(COMMON_HEAD))
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return commonClient;
    }

    public static Retrofit getRongCloudClient(){


        if (rongClouldClient == null) {
            rongClouldClient = new Retrofit.Builder()
                    .baseUrl(NetContents.RONG_CLOUD_HOST)
                    .client(getHttpClient(RONG_CLOUD_HEAD))
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return rongClouldClient;
    }

    public static OkHttpClient getHttpClient(final int headType){
        //okhttp log intercepter
        Interceptor okhttpLogInterceptor = new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Request request = chain.request();

                //add headers
                request = addHeaders(headType, request);

                if (BuildConfig.DEBUG) {
                    long t1 = System.nanoTime();
                    Response response = chain.proceed(request);
                    long t2 = System.nanoTime();

                    double time = (t2 - t1) / 1e6d;

                    String msg = "%s\nurl->" + request.url()
                            + "\ntime->" + time
                            + "ms\nheaders->" + request.headers()
                            + "\nresponse code->" + response.code()
                            + "\nresponse headers->" + response.headers()
                            + "\nbody->" + response.body().string();

                    if (request.method().equals("GET")) {
                        Logger.i(msg, "GET");
                    } else if (request.method().equals("POST")) {
                        Request copyRequest = request.newBuilder().build();
                        if (copyRequest.body() instanceof FormBody) {
                            Buffer buffer = new Buffer();
                            copyRequest.body().writeTo(buffer);
                            Logger.i("request params:" + buffer.readUtf8());
                        }
                        Logger.i(msg, "POST");
                    } else if (request.method().equals("PUT")) {
                        Logger.i(msg, "PUT");
                    } else if (request.method().equals("DELETE")) {
                        Logger.i(msg, "DELETE");
                    }
                }
                return chain.proceed(request);
            }
        };

        return new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(20, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .addInterceptor(okhttpLogInterceptor)
                .build();
    }

    /**
     * 添加请求头
     * @param type 区分不同的API
     * @param request
     * @return
     */
    private static Request addHeaders(int type, Request request){
        Request.Builder requestBuild = request.newBuilder();
        switch (type) {
            case RONG_CLOUD_HEAD:
                String nonce = (int)(Math.random()*1000000000)+"";
                String timestamp = System.currentTimeMillis()+"";
                String signature = SHA1.encode(BuildConfig.RONG_CLOUD_SECRET+nonce+timestamp);
                requestBuild.addHeader("App-Key",BuildConfig.RONG_CLOUD_KEY)
                        .addHeader("Nonce",nonce)
                        .addHeader("Timestamp",timestamp)
                        .addHeader("Signature",signature);
                break;
        }

        return requestBuild.build();
    }

}


这里注意过滤器返回值,直接返回response报错。

转载于:https://my.oschina.net/buobao/blog/702616

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值