java 请求https post 接口 绕过证书验证

本文介绍了一种绕过HTTPS证书验证的方法,通过创建自定义的X509TrustManager类并实现特定方法,使应用程序能忽略证书错误。此外,还提供了利用此自定义信任管理器进行HTTPS Post请求的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1,创建java类 继承 X509TrustManager,绕过证书用

import javax.net.ssl.X509TrustManager;
public class MyX509TrustManager implements X509TrustManager {

    public void checkClientTrusted(X509Certificate[] chain, String authType)
            throws CertificateException {
    }

    public void checkServerTrusted(X509Certificate[] chain, String authType)
            throws CertificateException {
    }

    public X509Certificate[] getAcceptedIssuers() {
        return null;
    }
}

2,利用MyX509TrustManager  绕过 https post请求的证书

import javax.net.ssl.*;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.cert.X509Certificate;

public class HttpsPostUtil {
    //添加主机名验证程序类,设置不验证主机
    private final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    };

    //添加信任主机
    private static void trustAllHosts() {
        // 创建不验证证书链的信任管理器 这里使用的是x509证书
        TrustManager[] trustAllCerts = new TrustManager[]{new MyX509TrustManager() {
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return new java.security.cert.X509Certificate[]{};
            }

            public void checkClientTrusted(X509Certificate[] chain, String authType) {
            }

            public void checkServerTrusted(X509Certificate[] chain, String authType) {
            }
        }};
        // 安装所有信任的信任管理器
        try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            //HttpsURLConnection通过SSLSocket来建立与HTTPS的安全连接,SSLSocket对象是由SSLSocketFactory生成的。
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     *  发送post 数据
     * @param urls
     * @return
     */
    public static String sendPost(String urls, String param, String contentType, String method)  {
        StringBuffer sb=new StringBuffer();
        PrintWriter out = null;
        BufferedReader responseReader = null;
        InputStream in1 = null;
        try {
            trustAllHosts();
            // 创建url资源
            URL url = new URL(urls);
            // 建立http连接
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
            conn.setHostnameVerifier(DO_NOT_VERIFY);
            // 设置不用缓存
            conn.setUseCaches(false);
            // 设置允许输出
            conn.setDoOutput(true);
            // 设置允许输入
            conn.setDoInput(true);
            // 设置传递方式
            conn.setRequestMethod(method);
            //System.out.println(conn.getRequestMethod());
            // 设置维持长连接
            conn.setRequestProperty("Connection", "Keep-Alive");
            // 设置文件字符集:
            conn.setRequestProperty("Charset", "UTF-8");
            // 转换为字节数组
//            byte[] data = (param).getBytes();
//            // 设置文件长度
//            conn.setRequestProperty("Content-Length", String.valueOf(data.length));
            // 设置文件类型:
            conn.setRequestProperty("Content-Type", contentType);
            // 开始连接请求
            conn.connect();
            /*out = new DataOutputStream(conn.getOutputStream());
            // 写入请求的字符串
            System.out.println(param);
            out.writeBytes(param);
            out.flush();*/

            //System.out.println(conn.getResponseCode());

            out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8"));
            // 发送请求参数
            out.print(param);
            // flush输出流的缓冲
            out.flush();


            // 请求返回的状态
            if (HttpURLConnection.HTTP_OK == conn.getResponseCode()) {
                System.out.println("连接成功");
                // 请求返回的数据
                in1 = conn.getInputStream();
                String readLine;
               // responseReader = new BufferedReader(new InputStreamReader(in1));
                responseReader = new BufferedReader(new InputStreamReader(in1,"UTF-8"));
                while((readLine=responseReader.readLine()) != null){
                    sb.append(readLine).append("\n");
                }
            } else {
                System.out.println("error++");
            }
        } catch (Exception e) {

        } finally {
            try {
                if (null != responseReader)
                    responseReader.close();
                if (null != in1)
                    in1.close();
            } catch(Exception e) {}
            try {
                out.close();
            } catch(Exception e) {}
        }

        return sb.toString();

    }


    public static void main(String[] args) {
        String params="";
        String url="";
        String sb = sendPost(url,params,"application/json;charset=UTF-8","POST");
        System.out.println("返回值===="+sb);

    }



}

https的 get请求绕过证书:

java 请求https get 接口证书验证问题_java 带证书get请求-CSDN博客

### Java调用HTTPS POST接口的示例 以下是通过Java实现调用HTTPS POST接口的一个完整示例代码。此代码基于`HttpURLConnection`类来完成请求发送并处理响应。 ```java import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import javax.net.ssl.HttpsURLConnection; public class HttpsPostExample { public static void main(String[] args) { try { // 定义目标URL URL url = new URL("https://example.com/api"); HttpURLConnection conn = (HttpsURLConnection) url.openConnection(); // 设置连接属性 conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "application/json"); // 构造JSON格式的数据 String jsonInputString = "{\"key\":\"value\"}"; // 发送POST请求体 try(OutputStream os = conn.getOutputStream()) { byte[] input = jsonInputString.getBytes("utf-8"); os.write(input, 0, input.length); } // 获取服务器返回的状态码 int responseCode = conn.getResponseCode(); System.out.println("Response Code: " + responseCode); // 处理响应流(这里省略具体读取逻辑) // 可以使用BufferedReader或其他工具读取conn.getInputStream() } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码展示了如何创建一个HTTPS POST请求,并设置必要的头部信息以及发送JSON格式的数据[^1]。如果需要绕过SSL认证,则可以引入自定义的信任管理器,但这通常不推荐用于生产环境[^3]。 对于更复杂的场景,还可以考虑使用第三方库如Apache HttpClient或者OkHttp来简化操作流程[^2]。 #### 注意事项 - 如果涉及敏感数据传输,请务必启用完整的SSL/TLS验证机制而非简单跳过。 - 上述方法适用于基本需求;实际应用中可能还需要额外配置超时时间、代理支持等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你好龙卷风!!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值