解決方案,藉助X509TrustManager,再創建httpClient的時候設置信任所有證書,
自己封裝的創建closeableHttpClient
public static CloseableHttpClient createHttpsClient() throws Exception {
//證書信任管理者
X509TrustManager x509mgr = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] xcs, String string) {
}
@Override
public void checkServerTrusted(X509Certificate[] xcs, String string) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
//獲取一個SSLContext實例
SSLContext sslContext = SSLContext.getInstance("TLS");
//初始化SSLContext實例
sslContext.init(null, new TrustManager[]{x509mgr}, new java.security.SecureRandom());
//構建一個SSLConnectionSocket工廠,設置爲信任所有證書
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext,
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
//返回CloseableHttpClient對象
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
}
用法示例
/**
* 發送Post請求
* @param url url
* @param params json,發送的內容
* @param headers headers,發送頭
* @return true or false
*/
public static JSONObject post(String url, String params, String headers){
CloseableHttpClient closeableHttpClient = null;
JSONObject result = new JSONObject();
//建立一個連接
try {
closeableHttpClient = createHttpsClient();
//創建一個HttpPost
HttpPost httpPost = new HttpPost(url);
//設置發送的內容
httpPost.setEntity(new StringEntity(params));
//設置頭信息
JSONObject jsonObject = JSONObject.parseObject(headers);
Set<String> keys = jsonObject.keySet();
for (String key : keys){
httpPost.setHeader(key,jsonObject.getString(key));
}
//發送
HttpResponse httpResponse = closeableHttpClient.execute(httpPost);
int returnCode = httpResponse.getStatusLine().getStatusCode();
if (returnCode == HttpStatus.SC_OK) {
InputStream is = httpResponse.getEntity().getContent();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = in.readLine()) != null) {
buffer.append(line);
}
result.put("code","200");
result.put("result",JSONObject.parseObject(buffer.toString()));
return result;
} else {
result.put("code","404");
result.put("result","no result");
return result;
}
} catch (Exception e) {
e.printStackTrace();
result.put("code","404");
result.put("result","no result");
return result;
}
}