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程序编译时与运行时进行了详解,需要的朋友可以参考下
    2017-04-04
  • java 使用foreach遍历集合元素的实例

    java 使用foreach遍历集合元素的实例

    这篇文章主要介绍了java 使用foreach遍历集合元素的实例的相关资料,这里提供实例帮助大家理解如何使用foreach 进行遍历,希望能帮助到大家,
    2017-08-08
  • JAVA发送HTTP请求的多种方式详细总结

    JAVA发送HTTP请求的多种方式详细总结

    目前做项目中有一个需求是这样的,需要通过Java发送url请求,查看该url是否有效,这时我们可以通过获取状态码来判断,下面这篇文章主要给大家介绍了关于JAVA发送HTTP请求的多种方式总结的相关资料,需要的朋友可以参考下
    2023-01-01
  • Mybatis Trim标签用法简单介绍

    Mybatis Trim标签用法简单介绍

    这篇文章主要介绍了Mybatis Trim标签用法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-05-05
  • Mybatis中isNotNull与isNotEmpty的使用心得

    Mybatis中isNotNull与isNotEmpty的使用心得

    这篇文章主要介绍了Mybatis中isNotNull与isNotEmpty的使用心得,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 关于通过Java连接mysql对反斜杠”\“转义的测试详解

    关于通过Java连接mysql对反斜杠”\“转义的测试详解

    这篇文章主要给大家介绍了关于通过Java连接mysql对反斜杠”\“转义的测试的相关资料,文中通过实例代码介绍的非常详细,对大家理解反斜杠”\“转义具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • ssm项目实现用户登陆持久化(token)

    ssm项目实现用户登陆持久化(token)

    这篇文章主要介绍了ssm项目实现用户登陆持久化(token),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 使用 Redis 缓存实现点赞和取消点赞的示例代码

    使用 Redis 缓存实现点赞和取消点赞的示例代码

    这篇文章主要介绍了使用 Redis 缓存实现点赞和取消点赞的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • spring boot与spring mvc的区别及功能介绍

    spring boot与spring mvc的区别及功能介绍

    这篇文章主要介绍了spring boot与spring mvc的区别是什么以及spring boot和spring mvc功能介绍,感兴趣的朋友一起看看吧
    2018-02-02
  • Mybatis-Plus通过SQL注入器实现批量插入的实践

    Mybatis-Plus通过SQL注入器实现批量插入的实践

    本文主要介绍了Mybatis-Plus通过SQL注入器实现批量插入的实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08

最新评论