Java后台https调用远程接口取消ssl验证

package com.ruoyi.zncc.utils;

import lombok.extern.slf4j.Slf4j;

import javax.net.ssl.*;
import java.io.*;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;

@Slf4j
public class HttpsClient {
    private static final class DefaultTrustMannager implements X509TrustManager {

        @Override
        public void checkClientTrusted(X509Certificate[] x509Certificates, String s) {

        }

        @Override
        public void checkServerTrusted(X509Certificate[] x509Certificates, String s) {

        }

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
        }
    }

    public static HttpsURLConnection getHttpsURLConnection(String uri, String method) throws IOException, NoSuchAlgorithmException {
        SSLContext ctx;
//        try {
//            ctx = SSLContext.getInstance("TLS");
//            ctx.init(new KeyManager[0], new TrustManager[] { new DefaultTrustMannager() }, new SecureRandom());
//        } catch (NoSuchAlgorithmException | KeyManagementException e) {
//            throw new RuntimeException(e);
//        }
        try {
            ctx = SSLContext.getInstance("SSL");
            TrustManager[] trustManagers = new TrustManager[1];
            trustManagers[0] = new DefaultTrustMannager();
            ctx.init(null, trustManagers, null);
            HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());
        } catch (KeyManagementException e) {
            throw new RuntimeException(e);
        }

        SSLSocketFactory ssf = ctx.getSocketFactory();

        URL url = new URL(null, uri, new sun.net.www.protocol.https.Handler());
        HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
        urlConnection.setSSLSocketFactory(ssf);
        urlConnection.setHostnameVerifier((s, sslSession) -> true);
        urlConnection.setRequestMethod(method);
        urlConnection.setDoInput(true);
        urlConnection.setDoOutput(true);
//        urlConnection.setConnectTimeout(10000);
        if (method.equals("POST")) {
            urlConnection.setRequestProperty("Content-Type", "application/json;charset=utf-8");
        }
        return urlConnection;
    }

    public static byte[] getBytesFromStream(InputStream is) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] kb = new byte[1024];
        int len;
        while ((len = is.read(kb)) != -1) {
            baos.write(kb, 0, len);
        }
        byte[] bytes = baos.toByteArray();
        baos.close();
        is.close();
        return bytes;
    }

    private static void setBytesToStream(OutputStream os, byte[] bytes) throws IOException {
        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
        byte[] kb = new byte[1024];
        int len;
        while ((len = bais.read(kb)) != -1) {
            os.write(kb, 0, len);
        }
        os.flush();
        os.close();
        bais.close();
    }

    private static String doGet(String uri) {
        try {
            log.info("https的get请求链接为" + uri);
            HttpsURLConnection httpsConn = getHttpsURLConnection(uri, "GET");
            return new String(getBytesFromStream(httpsConn.getInputStream()));
        } catch (IOException | NoSuchAlgorithmException e) {
            log.error("https的请求出现异常:", e.getCause());
        }
        return null;
    }

    public static String doJsonPost(String uri, String data) {
        try {
            log.info("https的POST请求地址为:" + uri);
            log.info("https的POST请求参数为:" + data);
            HttpsURLConnection httpsConn = getHttpsURLConnection(uri, "POST");
            setBytesToStream(httpsConn.getOutputStream(), data.getBytes("utf-8"));
            String result = new String(getBytesFromStream(httpsConn.getInputStream()));
            log.info("https的POST请求结果为:" + result);
            return result;
        } catch (IOException | NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
}

是参考两篇文章做的,注明了一篇原文作者,另外一位不记得了,只是学习记录,不存在利益关系。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值