Java发送https请求并跳过ssl证书验证方法

 更新时间:2023年11月29日 11:00:51   作者:樵浅  
最近在负责一个对接第三方服务的事情,在对接期间因为第三方服务为https的请求,这篇文章主要给大家介绍了关于Java发送https请求并跳过ssl证书验证的相关资料,需要的朋友可以参考下

平台服务调用https接口报错:

org.springframework.web.client.ResourceAccessException: I/0 error on PoST request for ?"https://XXXXX": java.security.centp.CertificateException: No subject alternative names present; nested exception is javax.net.ssl..SSLHandshakeException: java.security.cert.CertificateException: No subject alternative namesspresent

第一种方法:配置相关SSL证书到服务器

第二种方法:如果没有相关服务器权限,又想快速验证接口调用,可以在请求时添加跳过SSL证书,可以 快捷实现,当然生产环境还是建议配置证书方式,降低风险

/**
     * 发送https请求并跳过ssl证书验证
     * 条件:请求体格式为json
     *
     * @param url
     * @param body
     * @return
     */
    public static String sendAskSkipSSLCertificate(String url, Map<String, Object> body, Map<String, String> header) throws Exception {

        CloseableHttpResponse response = null;
        // 处理请求路径
        url = UriComponentsBuilder.fromHttpUrl(url) .toUriString();
        //创建httpclient对象
        CloseableHttpClient client = null;
        String respBody;
        client = HttpClients.custom().setSSLSocketFactory(new SSLConnectionSocketFactory(SSLContexts.custom()
                        .loadTrustMaterial(null, new TrustSelfSignedStrategy()).build(), NoopHostnameVerifier.INSTANCE)).build();
        //创建post方式请求对象
        HttpPost httpPost = new HttpPost(url);
        // 请求头设置
        httpPost.setHeader("Content-Type", "application/json");
        if (header != null) {
            for (String s : header.keySet()) {
                httpPost.setHeader(s, header.get(s));
            }
        }
        if (body != null) {
            httpPost.setEntity(new StringEntity(JSON.toJSONString(body), "utf-8"));
        }
        response = client.execute(httpPost);
        org.apache.http.HttpEntity entity = response.getEntity();
        if (entity != null) {
            respBody = EntityUtils.toString(entity);
            return respBody;
        }
        return null;
 }

附:Java直接调用HTTP接口,并且获取List出参,输出数据List

1.代码实现 

public WrapperResponse<List<WarningDTO>> queryBigWarning(WarnInfoBInfoQueryDTO warnInfoBInfoQueryDTO) throws Exception {
    String SERVICE_URL = "http://127.0.0.1:8889/wakljfa";
        //发送httpPost请求
        //创建HttpClient
        HttpClient httpclient = HttpClients.createDefault();
        //发送接口地址
        HttpPost httppost = new HttpPost(SERVICE_URL);
        //定义String请求Json参数体
        httppost.setEntity(new StringEntity(new String("{" +
                "\"pageNum\": \"" + warnInfoBInfoQueryDTO.getPageNum() + "\"," +
                "\"pageSize\": \"" + warnInfoBInfoQueryDTO.getPageSize() + "\"," +
                "\"warnType\": \"" + warnInfoBInfoQueryDTO.getWarnType() + "\"" +
                "}"), Charset.forName("UTF-8")));

        httppost.setHeader("Content-Type", "application/json");
        //发送请求并接收response
        HttpResponse httpresponse = httpclient.execute(httppost);
        String result = EntityUtils.toString(httpresponse.getEntity(), "UTF-8");

        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode responseJson = objectMapper.readTree(result);
        // 从JSON对象中获取键值对,根据出参格式获取出参数据
        JsonNode data = responseJson.get("data");
        JsonNode listWarn = pageInfo.get("list");

        Iterator<JsonNode> iterator = listWarn.iterator();
        List<WarningDTO> warningDTOS = new ArrayList<>();
        while (iterator.hasNext()) {
            WarningDTO warningDTO = new WarningDTO();
            JsonNode warningNode =  iterator.next();
            String warnOcurTime= warningNode.get("warnOcurTime").asText();
            warningDTO.setWarnOcurTime(warnOcurTime);
            String warnId= warningNode.get("warnId").asText();
            warningDTO.setWarnId( warnId);
            String id= warningNode.get("id").asText();
            warningDTO.setId( Id);
            warningDTOS.add(warningDTO);
        }
        return WrapperResponse.success(warningDTOS);
}

2.出参模式

"data": {
			"list": [
				{
					"warnId": "000000000000000000000000000201",
					"warnOcurTime": 1672502400000,
					"id": "000000000000000000000000000201"
				},
				{
					"warnId": "000000000000000000000000000301",
					"warnOcurTime": 1672502400000,
	                "id": "000000000000000000000000000301"
				}
			]
}

总结 

到此这篇关于Java发送https请求并跳过ssl证书验证方法的文章就介绍到这了,更多相关发送https请求跳过ssl证书内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java的静态类型检查示例代码详解

    Java的静态类型检查示例代码详解

    本文将使用几个代码示例,深入讲解Java中的类型检查机制。一旦完全理解了本文的例子,就完全掌握了Java中的静态类型检查,感兴趣的朋友一起看看吧
    2017-11-11
  • MyBatis中正则使用foreach拼接字符串

    MyBatis中正则使用foreach拼接字符串

    这篇文章主要介绍了MyBatis中正则使用foreach拼接字符串,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 如何利用反射生成 MyBatisPlus中QueryWrapper动态条件

    如何利用反射生成 MyBatisPlus中QueryWrapper动态条件

    这篇文章主要介绍了如何利用反射生成 MyBatisPlus中QueryWrapper动态条件,分享在MyBatisPlus中经常会用到代码来构造查询条件等内容,需要的小伙伴可以参考一下
    2022-02-02
  • Java计算代码段执行时间的详细过程

    Java计算代码段执行时间的详细过程

    java里计算代码段执行时间可以有两种方法,一种是毫秒级别的计算,另一种是更精确的纳秒级别的计算,这篇文章主要介绍了java计算代码段执行时间,需要的朋友可以参考下
    2023-02-02
  • Maven setting.xml配置文件详解

    Maven setting.xml配置文件详解

    本篇文章主要介绍了Maven setting.xml 配置文件详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • springboot+dubbo实现时间轮算法

    springboot+dubbo实现时间轮算法

    时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • 一步步教你写一个SpringMVC框架

    一步步教你写一个SpringMVC框架

    现在主流的Web MVC框架除了Struts这个主力外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,这篇文章主要给大家介绍了关于如何一步步写一个SpringMVC框架的相关资料,需要的朋友可以参考下
    2022-03-03
  • 详解Java Streams 中的异常处理

    详解Java Streams 中的异常处理

    这篇文章主要介绍了Java Streams 中的异常处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • java如何判断一个对象是否为空对象

    java如何判断一个对象是否为空对象

    本文主要介绍了java如何判断一个对象是否为空对象,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Java中的3种输入方式实现解析

    Java中的3种输入方式实现解析

    这篇文章主要介绍了Java中的3种输入方式实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10

最新评论