使用retrofit请求添加拦截器打印日志

使用retrofit请求添加拦截器打印日志
在这里插入图片描述

public class MyLoggingInterceptor implements Interceptor {
    private static final String TAG = "MyLoggingInterceptor";
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request original = chain.request();
        Response response = chain.proceed(original);
        Log.i(TAG,String.format("...\n请求链接:%s\n请求头:%s\n请求参数:%s\n请求响应%s", original.url(),getRequestHeaders(original),getRequestInfo(original), getResponseInfo(response)));
        return response;
    }

    /**
     * 打印请求头
     *
     * @param request 请求的对象
     */
    private String getRequestHeaders(Request request) {
        String str = "";
        if (request == null) {
            return str;
        }
        Headers headers = request.headers();
        if (headers == null) {
            return str;
        }
        return headers.toString();
    }

    /**
     * 打印请求消息
     *
     * @param request 请求的对象
     */
    private String getRequestInfo(Request request) {
        String str = "";
        if (request == null) {
            return str;
        }
        RequestBody requestBody = request.body();
        if (requestBody == null) {
            return str;
        }
        try {
            Buffer bufferedSink = new Buffer();
            requestBody.writeTo(bufferedSink);
            Charset charset = Charset.forName("utf-8");
            str = bufferedSink.readString(charset);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return str;
    }

    /**
     * 打印返回消息
     *
     * @param response 返回的对象
     */
    private String getResponseInfo(Response response) {
        String str = "";
        if (response == null || !response.isSuccessful()) {
            return str;
        }
        ResponseBody responseBody = response.body();
        long contentLength = responseBody.contentLength();
        BufferedSource source = responseBody.source();
        try {
            source.request(Long.MAX_VALUE); // Buffer the entire body.
        } catch (IOException e) {
            e.printStackTrace();
        }
        Buffer buffer = source.buffer();
        Charset charset = Charset.forName("utf-8");
        if (contentLength != 0) {
            str = buffer.clone().readString(charset);
        }
        return str;
    }
}

//-----------------通过拦截器添加token---------------------------//
public class RequestInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request original = chain.request();
        String token = BaseApplication.app.getDataCenter().getToken();
        Request request = original.newBuilder()
                .header("Token", token == null ? "" : token)
                .header("Client", "ANDROID")
                .method(original.method(), original.body())
                .build();

        return chain.proceed(request);
    }
}
发布了63 篇原创文章 · 获赞 45 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/parade0393/article/details/103946038