http日志打印

http请求老是有日志打印如何全局配置输出

1、创建URLStreamHandlerFactory

java 复制代码
package com.zhk.study.test;


import java.net.URLStreamHandler;
import java.net.URLStreamHandlerFactory;

class MyProtocolHandlerFactory implements URLStreamHandlerFactory {
    @Override
    public URLStreamHandler createURLStreamHandler(String protocol) {
        if (protocol.contains("http")) {
            return new MyProtocolHandler();
        }
        return null;
    }
}

2、创建URLStreamHandler

java 复制代码
package com.zhk.study.test;


import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;

public class MyProtocolHandler extends URLStreamHandler {



    @Override
    protected URLConnection openConnection(URL u) throws IOException {
        return new CustomURLConnection(u);
    }
}

3、创建HttpURLConnection

java 复制代码
package com.zhk.study.test;



import java.io.*;
import java.lang.reflect.Method;
import java.net.HttpURLConnection;
import java.net.URL;

public class CustomURLConnection extends HttpURLConnection {
    private HttpURLConnection urlConnection;


    private ThreadLocal<InputStream> threadLocal = new ThreadLocal();


    private static String PREFIX = "sun.net.www.protocol";


    public static OutputStream postParams = null;


    public CustomURLConnection(URL url) {
        super(null);
        String name = PREFIX + "." + url.getProtocol() + ".Handler";
        try {
            Class<?> aClass = Class.forName(name);
            Method method = aClass.getDeclaredMethod("openConnection", URL.class);
            Object handler = aClass.getConstructor().newInstance();
            method.setAccessible(true);
            this.urlConnection = (HttpURLConnection)method.invoke(handler, url);
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    @Override
    public void disconnect() {

        InputStream inputStream = threadLocal.get();
        if (inputStream!=null) {
            try{
                inputStream.close();
            }catch (Exception e) {
            }
            try {
                threadLocal.remove();
            } catch (Exception e) {
            }
        }

        if (postParams != null) {
            System.out.println("参数:"+ postParams.toString());
            try{
                postParams.close();
            } catch (Exception e) {

            }

        }
        this.urlConnection.disconnect();
    }

    @Override
    public boolean usingProxy() {
        return this.urlConnection.usingProxy();
    }

    @Override
    public void connect() throws IOException {
        this.urlConnection.connect();
    }



    @Override
    public InputStream getInputStream() throws IOException {
        try(
                ByteArrayOutputStream buffer = new ByteArrayOutputStream();

        ) {
            if (threadLocal.get() == null) {
                InputStream inputStream = urlConnection.getInputStream();
                // 读取响应数据并缓存到一个字节数组
                int bytesRead;
                byte[] data = new byte[1024];

                while ((bytesRead = inputStream.read(data, 0, data.length)) != -1) {
                    buffer.write(data, 0, bytesRead);
                }
                System.out.println("日志" + buffer);
                // 获取响应数据的字节数组
                byte[] responseData = buffer.toByteArray();
                // 创建一个新的 ByteArrayInputStream 来读取响应数据
                ByteArrayInputStream responseStream = new ByteArrayInputStream(responseData);
                threadLocal.set(responseStream);
            }
        } catch (Exception e) {

        }

        return threadLocal.get();

    }




    @Override
    public void setDoInput(boolean doinput) {
        this.urlConnection.setDoInput(doinput);
    }
    @Override
    public void setDoOutput(boolean doinput) {
        this.urlConnection.setDoOutput(doinput);
    }

    @Override
    public OutputStream getOutputStream() throws IOException {
        postParams = urlConnection.getOutputStream();
        return this.urlConnection.getOutputStream();
    }






}

4、静态代码块

java 复制代码
package com.zhk.study.test;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;


import java.net.URL;

public class Test {
    static {
        URL.setURLStreamHandlerFactory(new MyProtocolHandlerFactory());
    }
    public static void main(String[] args) {

        HttpRequest get = HttpUtil.createPost("https://xxxx/getCard");
        get.form("vin","0ZZD3333");
        get.body("{\"name\":123}");
        HttpResponse execute = get.execute();
        String body = execute.body();
        System.out.println("我是结果集:::" + body);
    }


}
相关推荐
可乐鸡翅yeah_4 小时前
新手梳理:HLS 线上问题,哪些该提给 CDN,哪些该找后端切片服务
开发语言·前端·javascript·vue.js·网络协议·http·m3u8在线
垆边人似月.4 小时前
5G 网络建设(300 分档)
网络·5g
国科安芯4 小时前
低轨卫星导航授时载荷中高精度定时控制器的时钟稳定性与抗辐射特性研究
网络·人工智能·低轨卫星·商业航天·授时·抗辐射·时钟稳定
白帽攻防录4 小时前
SRC 挖洞:V8 Turbofan 沙箱逃逸深度复盘,CVE-2026-6307 一根长矛怎么刺穿 Chrome 两道边界
网络·chrome·安全·网络安全·浏览器安全
网络小江4 小时前
上网第四十一课:从输入网址到页面显示——一次完整的网络之旅
网络协议
pt10435 小时前
CML网络仿真入门-3:Cisco Modeling Labs 网络工具功能详解
网络
欣欣之王来了5 小时前
5G网络基础:5G的核心特性,eMBB、uRLLC、mMTC的应用场景
网络·学习·计算机网络·安全·教程
杭州领祺科技5 小时前
保信子站深度解析:继电保护信息采集与故障诊断的关键枢纽
linux·服务器·网络·新能源·储能·虚拟电厂
m0_738185825 小时前
Flutter 鸿蒙化实战:http_proxy 适配 OpenHarmony,HTTP 代理
flutter·http·华为·harmonyos·鸿蒙
灯澜忆梦5 小时前
【minio】#5 | MinIO 分布式部署 + HTTPS 部署
分布式·网络协议·https·对象存储·minio