通过 Apache Commons HttpClient 发送 HTTPS 请求详解编程语言

1、通过 HTTPS 发送 POST 请求;

2、HTTPS 安全协议采用 TLSv1.2;

3、 使用代理(Proxy)进行 HTTPS 访问;

4、指定 Content-Type 为:application/x-www-form-urlencoded;

5、HTTPS  请求时加载客户端证书(Client Certificate);

6、忽略服务器端证书链(Server Certificate Chain)的校验(Validate)。

public static void main(String[] args) throws IOException, UnrecoverableKeyException, CertificateException, KeyStoreException, KeyManagementException { 
        SSLConnectionSocketFactory socketFactory = getSocketFactory(); 
         
        // 创建 CloseableHttpClient 对象 
        CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(socketFactory).build(); 
         
        // 指定请求的 URL 并创建 HttpPost 对象 
        HttpPost httppost = new HttpPost("https://xxxx/yyyy"); 
         
        // 设置请求通过的代理 
        httppost.setConfig(RequestConfig.custom().setProxy(new HttpHost("host", 8080)).build()); 
        HttpEntity entity; 
         
        // 设置请求的 ContentType 为 application/x-www-form-urlencoded 
        httppost.addHeader(HttpHeaders.CONTENT_TYPE, Consts.HTTP_REQUEST_CONTENTTYPE_FORM); 
         
        // 构建 POST 的内容 
        List<BasicNameValuePair> nvps = new ArrayList<>(); 
        nvps.add(new BasicNameValuePair("amount", "1.00")); 
        entity = new UrlEncodedFormEntity(nvps, Consts.CHARSET_UTF8); 
        httppost.setEntity(entity); 
        CloseableHttpResponse response = null; 
        try { 
            // 发送请求 
            response = httpclient.execute(httppost); 
             
            // 获取响应内容 
            HttpEntity entity1 = response.getEntity(); 
            System.out.println(EntityUtils.toString(entity1)); 
        } finally { 
            if (null != response) { 
                response.close(); 
            } 
            if (null != httpclient) { 
                httpclient.close(); 
            } 
        } 
    } 
 
    // 忽略服务器端证书链的认证 
    private static TrustManager getTrustManagers() { 
        return new X509TrustManager() { 
            public X509Certificate[] getAcceptedIssuers() { 
                return null; 
            } 
 
            public void checkClientTrusted(X509Certificate[] certs, String authType) { 
            } 
 
            public void checkServerTrusted(X509Certificate[] certs, String authType) { 
            } 
        }; 
    } 
 
    private static SSLConnectionSocketFactory getSocketFactory() throws IOException, KeyStoreException, CertificateException, UnrecoverableKeyException, KeyManagementException { 
        SSLContext sslContext; 
        try { 
            // keyStore 用来存放客户端证书 
            KeyStore keyStore = KeyStore.getInstance("PKCS12"); 
            FileInputStream instream = new FileInputStream(new File("d://test.p12")); 
            try { 
                keyStore.load(instream, "passwd".toCharArray()); 
            } finally { 
                instream.close(); 
            } 
             
            // 加载客户端证书,并设置HTTPS的安全协议为 TLSv1.2 
            sslContext = SSLContexts.custom().loadKeyMaterial(keyStore, "passwd".toCharArray()).useProtocol("TLSv1.2").build(); 
        } catch (NoSuchAlgorithmException e) { 
            return null; 
        } 
        try { 
            sslContext.init(null, new TrustManager[]{getTrustManagers()}, new java.security.SecureRandom()); 
        } catch (KeyManagementException e) { 
            return null; 
        } 
        return new SSLConnectionSocketFactory(sslContext); 
    }

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/15947.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论