httpClient4.5.2版本,繞過證書調用https地址

前段時間有個對接需求,提供一個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));
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章