zoukankan      html  css  js  c++  java
  • 通过 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);
        }
  • 相关阅读:
    Centos7安装dockercompose
    windows环境下python2和python3版本的切换
    移动硬盘无法读取分区表修复RAW格式修复
    网络与信息安全初探
    MyBatis下在插入数据时获得MySQL自增长序列的值
    CentOS7下mongodb忘记密码后重置密码
    url中有空格等特殊字符及中文字符处理
    通过linux mail实现网站存活监控告警通知
    如何通过SecureCRT转发功能实现外网访问内网服务
    java转JSON串的几种方式
  • 原文地址:https://www.cnblogs.com/frankyou/p/7522197.html
Copyright © 2011-2022 走看看