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)。

  1. public static void main(String[] args) throws IOException, UnrecoverableKeyException, CertificateException, KeyStoreException, KeyManagementException {
  2. SSLConnectionSocketFactory socketFactory = getSocketFactory();
  3.  
  4. // 创建 CloseableHttpClient 对象
  5. CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(socketFactory).build();
  6.  
  7. // 指定请求的 URL 并创建 HttpPost 对象
  8. HttpPost httppost = new HttpPost("https://xxxx/yyyy");
  9.  
  10. // 设置请求通过的代理
  11. httppost.setConfig(RequestConfig.custom().setProxy(new HttpHost("host", 8080)).build());
  12. HttpEntity entity;
  13.  
  14. // 设置请求的 ContentType 为 application/x-www-form-urlencoded
  15. httppost.addHeader(HttpHeaders.CONTENT_TYPE, Consts.HTTP_REQUEST_CONTENTTYPE_FORM);
  16.  
  17. // 构建 POST 的内容
  18. List<BasicNameValuePair> nvps = new ArrayList<>();
  19. nvps.add(new BasicNameValuePair("amount", "1.00"));
  20. entity = new UrlEncodedFormEntity(nvps, Consts.CHARSET_UTF8);
  21. httppost.setEntity(entity);
  22. CloseableHttpResponse response = null;
  23. try {
  24. // 发送请求
  25. response = httpclient.execute(httppost);
  26.  
  27. // 获取响应内容
  28. HttpEntity entity1 = response.getEntity();
  29. System.out.println(EntityUtils.toString(entity1));
  30. } finally {
  31. if (null != response) {
  32. response.close();
  33. }
  34. if (null != httpclient) {
  35. httpclient.close();
  36. }
  37. }
  38. }
  39.  
  40. // 忽略服务器端证书链的认证
  41. private static TrustManager getTrustManagers() {
  42. return new X509TrustManager() {
  43. public X509Certificate[] getAcceptedIssuers() {
  44. return null;
  45. }
  46.  
  47. public void checkClientTrusted(X509Certificate[] certs, String authType) {
  48. }
  49.  
  50. public void checkServerTrusted(X509Certificate[] certs, String authType) {
  51. }
  52. };
  53. }
  54.  
  55. private static SSLConnectionSocketFactory getSocketFactory() throws IOException, KeyStoreException, CertificateException, UnrecoverableKeyException, KeyManagementException {
  56. SSLContext sslContext;
  57. try {
  58. // keyStore 用来存放客户端证书
  59. KeyStore keyStore = KeyStore.getInstance("PKCS12");
  60. FileInputStream instream = new FileInputStream(new File("d:\\test.p12"));
  61. try {
  62. keyStore.load(instream, "passwd".toCharArray());
  63. } finally {
  64. instream.close();
  65. }
  66.  
  67. // 加载客户端证书,并设置HTTPS的安全协议为 TLSv1.2
  68. sslContext = SSLContexts.custom().loadKeyMaterial(keyStore, "passwd".toCharArray()).useProtocol("TLSv1.2").build();
  69. } catch (NoSuchAlgorithmException e) {
  70. return null;
  71. }
  72. try {
  73. sslContext.init(null, new TrustManager[]{getTrustManagers()}, new java.security.SecureRandom());
  74. } catch (KeyManagementException e) {
  75. return null;
  76. }
  77. return new SSLConnectionSocketFactory(sslContext);
  78. }

通过 Apache Commons HttpClient 发送 HTTPS 请求的更多相关文章

  1. java apache commons HttpClient发送get和post请求的学习整理(转)

    文章转自:http://blog.csdn.net/ambitiontan/archive/2006/01/06/572171.aspx HttpClient 是我最近想研究的东西,以前想过的一些应用 ...

  2. 使用HttpClient发送HTTPS请求以及配置Tomcat支持SSL

    这里使用的是HttpComponents-Client-4.1.2 package com.jadyer.util; import java.io.File; import java.io.FileI ...

  3. springboot2.X集成HttpClient 发送HTTPS 请求

    1)jar <!--httpclient 发送外部https/http 请求--> <dependency> <groupId>org.apache.httpcom ...

  4. 用HttpClient发送HTTPS请求报SSLException: Certificate for <域名> doesn't match any of the subject alternative names问题的解决

    最近用server酱-PushBear做消息自动推送,用apache HttpClient做https的get请求,但是代码上到服务器端就报javax.net.ssl.SSLException: Ce ...

  5. Java使用Apache的HttpClient组件发送https请求

    如果我们直接通过普通的方式对https的链接发送请求,会报一个如下的错误: javax.net.ssl.SSLHandshakeException: sun.security.validator.Va ...

  6. java httpclient发送json 请求 ,go服务端接收

    /***java客户端发送http请求*/package com.xx.httptest; /** * Created by yq on 16/6/27. */ import java.io.IOEx ...

  7. 【JAVA】通过HttpClient发送HTTP请求的方法

    HttpClient介绍 HttpClient 不是一个浏览器.它是一个客户端的 HTTP 通信实现库.HttpClient的目标是发 送和接收HTTP 报文.HttpClient不会去缓存内容,执行 ...

  8. org.apache.commons.httpclient工具类

    import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpcl ...

  9. httpClient使用中报错org.apache.commons.httpclient.HttpMethodBase - Going to buffer response body of large or unknown size.

    在使用HttpClient发送请求,使用httpMethod.getResponseBodyAsString();时当返回值过大时会报错: org.apache.commons.httpclient. ...

随机推荐

  1. 将win7电脑无线网变身WiFi热点,让手机、笔记本共享上网

    1.以管理员身份运行命令提示符:快捷键win+R→输入cmd→回车 2.启用并设定虚拟WiFi网卡:运行命令:netsh wlan set hostednetwork mode=allow ssid= ...

  2. 《Web性能权威指南》

    <Web性能权威指南> 基本信息 原书名:High performance browser networking 原出版社: O'Reilly Media 作者: (加)Ilya Grig ...

  3. PostgreSQL入门,PostgreSQL和mysql

    PostgreSQL被誉为“世界上功能最强大的开源数据库”,是以加州大学伯克利分校计算机系开发的POSTGRES 4.2为基础的对象关系型数据库管理系统. PostgreSQL支持大部分 SQL标准并 ...

  4. H2:开源内存数据库引擎

    本资源由 伯乐在线 - 刘立华 整理 H2是一个开源的内存数据库.Java编写.快速.小巧(1.5MB jar包)还提供了Web控制台管理数据库内容. 主要功能 非常快速的数据库引擎. 开源. Jav ...

  5. DPI (Deep Packet Inspection) 深度包检测技术

    详解DPI与网络回溯分析技术 随着网络通讯技术进步与发展,网络通讯已跨入大数据时代,如何监控各类业务系统的通讯数据在大数据流量中传输质量,以及针对海量的网络通讯数据的范畴中存在少量的恶意流量的检测,避 ...

  6. [转]Linux系统下如何查看及修改文件读写权限

    转自 :http://www.cnblogs.com/CgenJ/archive/2011/07/28/2119454.html 查看文件权限的语句: 在终端输入:ls -l xxx.xxx (xxx ...

  7. OA系统权限管理设计方案【转】

    l 不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是最基本的功能. l 可以对“组”进行权限分配.对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是 ...

  8. 【BLE】CC2541之发现服务与特征值

    一.简介 本文以SimpleBLECentral工程为例,解析CC2541作为主机时是如何发现从机的服务和特征值的. 二.实验平台 协议栈版本:BLE-CC254x-1.4.0 编译软件:IAR 8. ...

  9. 高德地图JS-API (超简单Get新技能√)

    上几章我们研究了百度地图SDK的用法,虽然不难但是配置起来也是相当的繁琐,现在高德LBS开放平台推出了基于HTML5的地图组件,我们可以通过WebView直接用URL 以GET方式进行请求就可以实现位 ...

  10. 关于UITableView的黑线条

    这里採用分组形式.底色可用图片覆盖,设置为cell(是一个view)的子视图,并把cell'的颜色设置为底色 当UITableView的cell没有满屏显示时,就会出现黑线条.我们仅仅需在初始化时,加 ...