HttpLoggingInterceptor消息拦截器

作者: Super_l1 | 来源:发表于2017-11-30 14:30 被阅读4053次

    为什么要用消息拦截器?
    因为有时候接口不同在排错的时候 需要先从接口的响应中做分析。利用了消息拦截器可以清楚的看到接口返回的所有内容。不需要重新使用fildder等抓包工具来做分析。

    1.添加依赖

    //okhttp的log信息
    compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
    

    2.在合适的位置初始化(这里放在了构造,因为是单例,响应的拦截器也只new一次)

        private HttpMethod() {
           HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
                @Override
                public void log(String message) {
                    try {
                        String text = URLDecoder.decode(message, "utf-8");
                        Log.e("OKHttp-----", text);
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                        Log.e("OKHttp-----", message);
                    }
                }
            });
            //这里可以builder(). 添加更多的内容 具体看需求
            mClient = new OkHttpClient.Builder().addInterceptor(interceptor).build();
            //这行必须加 不然默认不打印
            interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        }
    

    3.在retrofit中设置httpclient

       Retrofit retrofit = new Retrofit.Builder()
                            .baseUrl(BASE_URL)
                            .addConverterFactory(GsonConverterFactory.create())
                            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                            //添加HttpClient
                            .client(mClient)
                            .build();
                    mApiService = retrofit.create(ApiService.class);
    

    setlevel用来设置日志打印的级别,共包括了四个级别:NONE,BASIC,HEADER,BODY
    BASEIC:请求/响应行
    HEADER:请求/响应行 + 头
    BODY:请求/响应航 + 头 + 体

    以下是BODY级别的 打印的日志如下


    image.png

    相关文章

      网友评论

        本文标题:HttpLoggingInterceptor消息拦截器

        本文链接:https://www.haomeiwen.com/subject/igyvbxtx.html