JDK HttpClient HTTPS请求绕过SSL证书校验

import com.alibaba.fastjson2.JSONObject;

import javax.net.ssl.SSLContext;
import javax.net.ssl.X509TrustManager;
import java.net.URI;
import java.net.http.HttpRequest;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.time.Duration;

/**
 * JDK HttpClient HTTPS请求绕过SSL证书校验
 *
 * @module
 * @author:lkl
 * @date: 2024-03-23
 */
public class JDKHttpsUtil {

    /**
     * 绕过SSL证书校验GET请求
     * @param url
     * @return:
     * @Author: lkl
     * @date:
     */
    public static JSONObject doGet(String url) throws Exception {
        SSLContext sc = getTrustSSLContext();
        //jdk自带的http客户端只能验证受信任证书,若要跳过证书验证只能设置下面的参数
        System.setProperty("jdk.internal.httpclient.disableHostnameVerification", "true");
        HttpRequest.Builder httpRequestBuilder = HttpRequest.newBuilder().GET().timeout(Duration.ofMinutes(10));
        java.net.http.HttpClient httpClient = java.net.http.HttpClient.newBuilder().sslContext(sc).build();
        HttpRequest request = httpRequestBuilder.copy().uri(URI.create(url)).build();
        java.net.http.HttpResponse<String> response = httpClient.send(request, java.net.http.HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
        return JSONObject.parseObject(response.body());
    }


    private static SSLContext getTrustSSLContext() throws Exception {
        SSLContext context = SSLContext.getInstance("SSL");
        context.init(null, new X509TrustManager[]{new X509TrustManager() {

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

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

            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }
        }}, new SecureRandom());
        return context;

    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值