这是一个网络请求,一个模拟接口,点击运行后会报错,如下面的图片。
CloseableHttpClient httpClients = HttpClients.createDefault();
HttpGet httpGet = new HttpGet("https://www.easy-mock.com/mock/5cc900f63fe48604e314ed2f/example/getdve");
createIgnoreVerifySSL();
CloseableHttpResponse response = httpClients.execute(httpGet);
try {
HttpEntity entity = response.getEntity();
String relutString = null;
if (entity != null) {
relutString = EntityUtils.toString(entity);
}
System.out.print(relutString);
} finally {
// TODO: handle finally clause
response.close();
}
分析来看问题的根本是:缺少安全证书时出现的异常。
添加下面的代码解决,成功绕过了证书验证
SSLContext sslcontext = createIgnoreVerifySSL();
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.INSTANCE)
.register("https", new SSLConnectionSocketFactory(sslcontext)).build();
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
HttpClients.custom().setConnectionManager(connManager);
// 创建自定义的httpclient对象
CloseableHttpClient httpClients = HttpClients.custom().setConnectionManager(connManager).build();
最终代码:
public static void setSSL()
throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException {
SSLContext sslcontext = createIgnoreVerifySSL();
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.INSTANCE)
.register("https", new SSLConnectionSocketFactory(sslcontext)).build();
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
HttpClients.custom().setConnectionManager(connManager);
// 创建自定义的httpclient对象
CloseableHttpClient httpClients = HttpClients.custom().setConnectionManager(connManager).build();
HttpGet httpGet = new HttpGet("https://www.easy-mock.com/mock/5cc900f63fe48604e314ed2f/example/getdve");
createIgnoreVerifySSL();
CloseableHttpResponse response = httpClients.execute(httpGet);
try {
HttpEntity entity = response.getEntity();
String relutString = null;
if (entity != null) {
relutString = EntityUtils.toString(entity);
}
System.out.print(relutString);
} finally {
// TODO: handle finally clause
response.close();
}
}
到此问题彻底解决!