网络-httpclient调用https服务端绕过证书的方法

httpclient调用https服务端绕过证书的方法

在日常开发或者测试中,通常会遇到需要用httpclient客户端调用对方http是服务器的场景,由于没有证书,所以直接是无法调用的。采用下面的方法可以绕过证书验证:

java 复制代码
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return null;
            }

            public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
            }

            public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
            }
        }};
        // 创建一个SSL上下文,设置信任管理器
        try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        } catch (Exception e) {
            e.printStackTrace();
        }

完整代码:

java 复制代码
 public static String sendHttpPostRequest(String url, JSONObject param) throws Exception {
        TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return null;
            }
            public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
            }
            public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
            }
        }};
        // 创建一个SSL上下文,设置信任管理器
        try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        } catch (Exception e) {
            e.printStackTrace();
        }
        URL apiUrl = new URL(url);
        HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();
        // 设置请求方法为 POST
        connection.setRequestMethod("POST");
        connection.setDoOutput(true);
        // 添加请求头
        connection.setRequestProperty("Content-Type", "application/json");
        //connection.setRequestProperty("", accessToken);
        // 发送 POST 请求必须设置如下两行
        OutputStream outputStream = connection.getOutputStream();
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8);
        outputStreamWriter.write(param.toJSONString());
        outputStreamWriter.flush();
        outputStreamWriter.close();
        int responseCode = connection.getResponseCode();
        System.out.println("Response Code: " + responseCode);
        // 创建一个 BufferedReader 来读取服务器的响应
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        StringBuffer response = new StringBuffer();
        String inputLine;
        while ((inputLine = bufferedReader.readLine()) != null) {
            response.append(inputLine);
        }
        bufferedReader.close();
        System.out.println("Response: " + response.toString());
        return null;
    }
相关推荐
MarcoPage36 分钟前
Python 字典推导式入门:一行构建键值对映射
java·linux·python
AORO20253 小时前
智能三防手机哪款好?22000mAh+夜视+露营灯打造专业户外装备
服务器·网络·智能手机·电脑·1024程序员节
Hello.Reader3 小时前
Data Sink定义、参数与可落地示例
java·前端·网络
报错小能手6 小时前
计算机网络自顶向下方法36——网络层 网络地址转换 网络安全(防火墙、入侵检测系统)
网络·计算机网络·智能路由器
ζั͡山 ั͡有扶苏 ั͡✾6 小时前
从零搭建 Data-Juicer:一站式大模型数据预处理与可视化平台完整教程
python·data-juicer
研究司马懿6 小时前
【ETCD】ETCD常用命令
网络·数据库·云原生·oracle·自动化·运维开发·etcd
SkylerHu6 小时前
tornado+gunicorn部署设置max_body_size
python·tornado·gunicorn
独行soc7 小时前
2025年渗透测试面试题总结-234(题目+回答)
网络·python·安全·web安全·渗透测试·1024程序员节·安全狮
木头左7 小时前
年化波动率匹配原则在ETF网格区间选择中的应用
python
清空mega8 小时前
从零开始搭建 flask 博客实验(3)
后端·python·flask