跨过https调用接口post方法

该博客主要介绍了在Java中如何实现不验证服务器证书的HTTPS连接,通过自定义`TrustManager`和`HostnameVerifier`来忽略安全检查。然而,这种方法在实际应用中存在严重安全隐患,可能导致中间人攻击。请谨慎使用,并确保在生产环境中正确配置SSL证书。
摘要由CSDN通过智能技术生成

Object data = post(url, JSON.toJSONString(map));

public static Object post(String url, String body) {
        class TrustAnyTrustManager implements 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[]{};
            }
        }
        class TrustAnyHostnameVerifier implements HostnameVerifier {
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        }
        SSLContext sc = null;
        try {
            sc = SSLContext.getInstance("SSL");
            sc.init(null, new TrustManager[]{new TrustAnyTrustManager()},
                    new java.security.SecureRandom());

            URL console = new URL(url);
            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
            conn.setDoOutput(true);
            conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
            conn.setSSLSocketFactory(sc.getSocketFactory());
            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
            conn.connect();
            DataOutputStream out = new DataOutputStream(conn.getOutputStream());
            out.write(body.getBytes("utf-8"));
            // 刷新、关闭
            out.flush();
            out.close();
            InputStream is = conn.getInputStream();
            if (is != null) {
                ByteArrayOutputStream outStream = new ByteArrayOutputStream();
                byte[] buffer = new byte[1024];
                int len = 0;
                while ((len = is.read(buffer)) != -1) {
                    outStream.write(buffer, 0, len);
                }
                is.close();
                if (outStream != null) {
                    String s = new String(outStream.toByteArray(), "utf-8");
                    Map map = JSON.parseObject(s, Map.class);
                    if (map.size() != 0) {
                        if (!Boolean.parseBoolean(map.get("success").toString())) {
                            return Collections.emptyMap();
                        }
                        return map.get("data");
                    }
                }
            }
        } catch (Exception e) {
            log.error("调用第三方平台失败: {}", e.getMessage());
            return Collections.emptyMap();
        }
        return Collections.emptyMap();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值