前段時間有個對接需求,提供一個https地址,供第三方調用,但是對方一直報協議錯誤,並要求我們提供安全證書。然而我們並沒有,於是我寫了個繞過證書的方法供他們測試使用,這裏直接用的post請求,入參是xml(其實入參什麼的不重要,最後都要轉的)。
httpclient-4.5.2.jar,httpclient-cache-4.5.2.jar,httpcore-4.4.6.jar
前端時間有個對接需求,提供一個https地址,供第三方調用,但是對方一直報協議錯誤,並要求我們提供安全證書。然而我們並沒有,於是我寫了個繞過證書的方法供他們測試使用,這裏直接用的post請求,入參是xml(其實入參什麼的不重要,最後都要轉的)。
httpclient-4.5.2.jar,httpclient-cache-4.5.2.jar,httpcore-4.4.6.jar
package zz.httpClient;
import java.io.File;
import java.io.IOException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.dom4j.Document;
import org.dom4j.io.SAXReader;
public class PGPlat {
//https Post請求
public static String postMultipartSSL(String url,String params) {
CloseableHttpClient httpClient = null;
HttpPost httpPost = null;
String result = "";
String fileName = "";
try {
httpClient = (CloseableHttpClient) wrapClient();
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(4000).setConnectTimeout(4000).build();
httpPost = new HttpPost(url);
httpPost.setConfig(requestConfig);
HttpEntity entity = new StringEntity(params, "utf-8");
httpPost.setEntity(entity);
CloseableHttpResponse response = httpClient.execute(httpPost);
HttpEntity httpEntity = response.getEntity();
result = EntityUtils.toString(httpEntity, "utf-8");
} catch (ClientProtocolException e) {
result = "";
} catch (IOException e) {
result = "";
}
return result;
}
//繞過證書
public static HttpClient wrapClient() {
try {
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] arg0,
String arg1) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] arg0,
String arg1) throws CertificateException {
}
};
ctx.init(null, new TrustManager[] { tm }, null);
SSLConnectionSocketFactory ssf = new SSLConnectionSocketFactory(
ctx, NoopHostnameVerifier.INSTANCE);
CloseableHttpClient httpclient = HttpClients.custom()
.setSSLSocketFactory(ssf).build();
return httpclient;
} catch (Exception e) {
return HttpClients.createDefault();
}
}
public static void main(String[] args) throws Exception {
// 創建SAXReader對象
SAXReader reader = new SAXReader();
// 讀取文件 轉換成Document
Document document = reader.read(new File("D:\\java開發\\eclipse-workspace\\zz\\WebContent\\WEB-INF\\proposal\\2300.xml"));
// document轉換爲String字符串
String documentStr = document.asXML();
System.out.println(postMultipartSSL("對方地址",documentStr));
}
}