一、原因
主要原因为接口服务器配置的https证书不合法,导致服务端返回的数字证书没有通过客户端的校验。
二、解决方法
1.使用合法的https证书;
2.接口调用跳过证书校验(大部分使用该方法);
代码如下:
TrustStrategy acceptingTrustStrategy = (x509Certificates, authType) -> true; SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build(); SSLConnectionSocketFactory connectionSocketFactory = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier()); HttpClientBuilder httpClientBuilder = HttpClients.custom(); httpClientBuilder.setSSLSocketFactory(connectionSocketFactory); CloseableHttpClient httpClient = httpClientBuilder.build(); //org.springframework.http.client.HttpComponentsClientHttpRequestFactory; HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); //设置请求超时时间 factory.setConnectionRequestTimeout(5 * 1000); factory.setConnectTimeout(5 * 1000); factory.setReadTimeout(5 * 1000); factory.setHttpClient(httpClient);
//org.springframework.web.client.RestTemplate
RestTemplate restTemplate = new RestTemplate(factory);
restTemplate.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter());
//设置请求头,根据具体要求设置
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
//请求参数
MultiValueMap<String, String> requestMap= new LinkedMultiValueMap<>();
requestMap.add("paramA", "1234");
requestMap.add("paramB", "1234");
requestMap.add("paramc", "1234");
HttpEntity requestEntity = new HttpEntity<>(requestMap, requestHeaders);
//发起请求,这里举例为post请求,get请求的话调用getForObject方法
//这里url即为请求接口地址
//response为返回参数构建的实体Class
ResponseEntity entity= restTemplate.postForEntity(url, requestEntity, ResponseEntity.class);
三、知识点补充
补充一下https请求验证过程
https://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html
版权声明:本文为kimi0710550原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。