public class HttpUtils {
private static CloseableHttpClient ignoreSSLClient;
/**
* 实现一个X509TrustManager接口,用于绕过验证,不用修改里面的方法
* @return
*/
private static SSLContext createIgnoreVerifySSL() {
X509TrustManager trustManager = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
SSLContext sc = null;
try {
sc = SSLContext.getInstance("SSLv3");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
try {
sc.init(null, new TrustManager[] { trustManager }, null);
} catch (KeyManagementException e) {
e.printStackTrace();
}
return sc;
}
static {
RequestConfig customizedRequestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build();
HttpClientBuilder customizedClientBuilder = HttpClients.custom().setDefaultRequestConfig(customizedRequestConfig);
PoolingHttpClientConnectionManager connectionManager;
Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.INSTANCE)
// 优先绕过安全证书
.register("https", new SSLConnectionSocketFactory(createIgnoreVerifySSL()))
.build();
connectionManager = new PoolingHttpClientConnectionManager(reg);
connectionManager.setDefaultMaxPerRoute(100);
customizedClientBuilder.setConnectionManager(connectionManager);
ignoreSSLClient = customizedClientBuilder.build();
}
/**
* 发送POST请求,绕过SSL检查
* @param url
* @param requestHeaders
* @param paramEntity
* @return
*/
public static String sendPostIgnoreSSL(String url, List<Header> requestHeaders, HttpEntity paramEntity){
try {
HttpPost httpPost = new HttpPost(url);
if (requestHeaders != null && requestHeaders.size()>0) {
for (Header h : requestHeaders) {
httpPost.addHeader(h);
}
}
httpPost.setEntity(paramEntity);
CloseableHttpResponse execute = ignoreSSLClient.execute(httpPost);
String entityStr = EntityUtils.toString(execute.getEntity(), "UTF-8");
return entityStr;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}