Retrofit 2.0+okhttp 3.0ログブロッカーInterceptorを追加

1565 ワード

retrofitはokhttpに基づいています.retrofit/okhttpを使用すると、これらはwifiに直結し、システムのwifi設定を行わないと、エージェントはパッケージをつかめません.したがって、パッケージをキャプチャしたい場合は、ネットワークカードをキャプチャしたり、リクエストを印刷したり、共通パラメータや署名を追加したりする場合は、ブロッキングを使用して追加することができます.
ブロッカーここではokhttpのアプリケーションブロッカーを使用してget postに統一パラメータと署名をそれぞれ追加し、まずinterceptorが独自のブロッカーを作成することを実現します.
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addNetworkInterceptor(new LoggingInterceptor());

  private static class LoggingInterceptor implements Interceptor {
        @Override
        public Response intercept(Interceptor.Chain chain) throws IOException {
            //  chain     request response,             
            Request request = chain.request();

            long t1 = System.nanoTime();//       
            DebugLog.i(String.format(Locale.CHINA, "     %s on %s%n%s",
                    request.url(), chain.connection(), request.headers()));

            Response response = chain.proceed(request);

            long t2 = System.nanoTime();//       

            ResponseBody responseBody = response.peekBody(1024 * 1024);

            //        response.body().string()       
        //  response.body().string()  ,response       ,     ,         
        //   response      
            DebugLog.i(String.format(Locale.CHINA, "    : [%s] %n  json:【%s】 %.1fms%n%s",
                    response.request().url(),
                    responseBody.string(),
                    (t2 - t1) / 1e6d,
                    response.headers()));

            return response;
        }
    }