分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

通过 Apache Commons HttpClient 发送 HTTPS 请求

发布时间:2023-09-06 01:11责任编辑:董明明关键词:暂无标签

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved