拦截http请求打印入参出参(Okhttp3拦截器)

本文介绍了如何通过在Okhttp3中添加拦截器,自动打印HTTP请求的输入参数和返回结果,以方便在对接三方接口时进行错误排查和参数比对。详细步骤包括引入Maven依赖、创建日志拦截器以及在Okhttp工具类中应用拦截器。
摘要由CSDN通过智能技术生成

前言

我们应用中经常出现请求其他三方接口,这也是经常会出错,找当时请求参数,返回结果比对的情况。如果自己加打印,很多时候会忘记。这里通过对Okhttp工具添加拦截器方式,将需要入参出参进行打印。

实践

一、引入maven 依赖

 <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.10.0</version>
        </dependency>

二、创建日志拦截器

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval;
import okhttp3.*;
import okio.Buffer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

/**
 * @author Administrator
 */
public class LoggingInterceptor implements Interceptor {
   

    private Logger logger = LoggerFactory.getLogger(LoggingInterceptor.class);



    @Override
    public Response intercept(Chain chain) throws IOException {
   
        Request request = chain.request();
        logForRequest(request);
        TimeInterval timer = DateUtil.timer();
        Response response =  chain.proceed(request);
        return logForResponse(response, timer);
    }

    private Response logForResponse(Response response, TimeInterval timer) {
   
        try {
   
            Response.Builder builder = response.newBuilder();
            Response clone = builder.build();
            logger.info("=========repose==log==start======");
            logger.info(String.format("repose url:%s,code:%s,time is:%s,headers:%s", clone.request().url(), clone.code(), timer.intervalMs() + "ms", clone.protocol()));

            ResponseBody body = clone.body();
            if (body != null) {
   
                MediaType mediaType = body.contentType();
                if (mediaType != null && isText(mediaType)) {
   
                    String content = body.string();
                    logger.info(String.format("message:%s,contentType:%s,content is:%s,", clone.message(), mediaType.toString(),content ));
                    body = ResponseBody.create(mediaType, content);
                    return response.newBuilder().body(body).build();
                }
            }
        } catch (Exception e) {
   
            logger.warn("print reponse error", e);
        }finally {
   
            logger.info("=========repose==log==end======");

        }
        return response;


    }

    private void logForRequest(Request request) {
   
        String url = request.url().toString();
        String method = request.method();
        Headers headers = request.headers();
        String headerStr = headers != null && headers.size() > 0 ? headers.toString() : "";
        logger.info("=========request==log==start======");
        logger.info(String.format("request url:%s,method:%s,headers:%s", url, method, headerStr));
        RequestBody requestBody = request.body();
        if (requestBody != null) {
   
            MediaType mediaType = requestBody.contentType(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值