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); ???}
通过 Apache Commons HttpClient 发送 HTTPS 请求
原文地址:http://www.cnblogs.com/frankyou/p/7522197.html