我在另一篇文章里也有描述,因为标题是描述另一个问题的,所以再起一篇文章https://blog.csdn.net/qq_36951116/article/details/91493376
https请求时绕过ssl证书验证:
/**
* 绕过验证
*
* @return
* @throws NoSuchAlgorithmException
* @throws KeyManagementException
*/
public static SSLContext createIgnoreVerifySSL() throws NoSuchAlgorithmException, KeyManagementException {
SSLContext sc = SSLContext.getInstance("SSLv3");
// 实现一个X509TrustManager接口,用于绕过验证,不用修改里面的方法
X509TrustManager trustManager = new X509TrustManager() {
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
String paramString) throws CertificateException {
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
String paramString) throws CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
};
sc.init(null, new TrustManager[] { trustManager }, null);
return sc;
}
HttpClient post请求:
private static String doPost(String url, Map<String, String> headers, Map<String, String> param) throws Exception {
HttpPost httpPost = new HttpPost(url);
if (headers != null) {
headers.forEach(httpPost::setHeader);
}
if (param != null) {
List<NameValuePair> pairList = (List)param.entrySet().stream().map((e) -> {
return new BasicNameValuePair((String)e.getKey(), (String)e.getValue());
}).collect(Collectors.toList());
httpPost.setEntity(new UrlEncodedFormEntity(pairList, "UTF-8"));
}
//*********************这一段是为了绕过ssl验证****************
//采用绕过验证的方式处理https请求
SSLContext sslcontext = createIgnoreVerifySSL();
// 设置协议http和https对应的处理socket链接工厂的对象
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 httpClient = HttpClients.custom().setConnectionManager(connManager).build();
//***********************************
//如果不需要绕过ssl验证,使用下面这一行获取的httpclient就行
// CloseableHttpClient httpClient = HttpClients.createDefault();
Throwable var5 = null;
Object var8;
try {
CloseableHttpResponse response = httpClient.execute(httpPost);
Throwable var7 = null;
try {
var8 = EntityUtils.toString(response.getEntity());
} catch (Throwable var31) {
var8 = var31;
var7 = var31;
throw var31;
} finally {
if (response != null) {
if (var7 != null) {
try {
response.close();
} catch (Throwable var30) {
var7.addSuppressed(var30);
}
} else {
response.close();
}
}
}
} catch (Throwable var33) {
var5 = var33;
throw var33;
} finally {
if (httpClient != null) {
if (var5 != null) {
try {
httpClient.close();
} catch (Throwable var29) {
var5.addSuppressed(var29);
}
} else {
httpClient.close();
}
}
}
return (String)var8;
}