通过 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);
- }
通过 Apache Commons HttpClient 发送 HTTPS 请求的更多相关文章
- java apache commons HttpClient发送get和post请求的学习整理(转)
文章转自:http://blog.csdn.net/ambitiontan/archive/2006/01/06/572171.aspx HttpClient 是我最近想研究的东西,以前想过的一些应用 ...
- 使用HttpClient发送HTTPS请求以及配置Tomcat支持SSL
这里使用的是HttpComponents-Client-4.1.2 package com.jadyer.util; import java.io.File; import java.io.FileI ...
- springboot2.X集成HttpClient 发送HTTPS 请求
1)jar <!--httpclient 发送外部https/http 请求--> <dependency> <groupId>org.apache.httpcom ...
- 用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 ...
- Java使用Apache的HttpClient组件发送https请求
如果我们直接通过普通的方式对https的链接发送请求,会报一个如下的错误: javax.net.ssl.SSLHandshakeException: sun.security.validator.Va ...
- java httpclient发送json 请求 ,go服务端接收
/***java客户端发送http请求*/package com.xx.httptest; /** * Created by yq on 16/6/27. */ import java.io.IOEx ...
- 【JAVA】通过HttpClient发送HTTP请求的方法
HttpClient介绍 HttpClient 不是一个浏览器.它是一个客户端的 HTTP 通信实现库.HttpClient的目标是发 送和接收HTTP 报文.HttpClient不会去缓存内容,执行 ...
- org.apache.commons.httpclient工具类
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpcl ...
- httpClient使用中报错org.apache.commons.httpclient.HttpMethodBase - Going to buffer response body of large or unknown size.
在使用HttpClient发送请求,使用httpMethod.getResponseBodyAsString();时当返回值过大时会报错: org.apache.commons.httpclient. ...
随机推荐
- 将win7电脑无线网变身WiFi热点,让手机、笔记本共享上网
1.以管理员身份运行命令提示符:快捷键win+R→输入cmd→回车 2.启用并设定虚拟WiFi网卡:运行命令:netsh wlan set hostednetwork mode=allow ssid= ...
- 《Web性能权威指南》
<Web性能权威指南> 基本信息 原书名:High performance browser networking 原出版社: O'Reilly Media 作者: (加)Ilya Grig ...
- PostgreSQL入门,PostgreSQL和mysql
PostgreSQL被誉为“世界上功能最强大的开源数据库”,是以加州大学伯克利分校计算机系开发的POSTGRES 4.2为基础的对象关系型数据库管理系统. PostgreSQL支持大部分 SQL标准并 ...
- H2:开源内存数据库引擎
本资源由 伯乐在线 - 刘立华 整理 H2是一个开源的内存数据库.Java编写.快速.小巧(1.5MB jar包)还提供了Web控制台管理数据库内容. 主要功能 非常快速的数据库引擎. 开源. Jav ...
- DPI (Deep Packet Inspection) 深度包检测技术
详解DPI与网络回溯分析技术 随着网络通讯技术进步与发展,网络通讯已跨入大数据时代,如何监控各类业务系统的通讯数据在大数据流量中传输质量,以及针对海量的网络通讯数据的范畴中存在少量的恶意流量的检测,避 ...
- [转]Linux系统下如何查看及修改文件读写权限
转自 :http://www.cnblogs.com/CgenJ/archive/2011/07/28/2119454.html 查看文件权限的语句: 在终端输入:ls -l xxx.xxx (xxx ...
- OA系统权限管理设计方案【转】
l 不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是最基本的功能. l 可以对“组”进行权限分配.对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是 ...
- 【BLE】CC2541之发现服务与特征值
一.简介 本文以SimpleBLECentral工程为例,解析CC2541作为主机时是如何发现从机的服务和特征值的. 二.实验平台 协议栈版本:BLE-CC254x-1.4.0 编译软件:IAR 8. ...
- 高德地图JS-API (超简单Get新技能√)
上几章我们研究了百度地图SDK的用法,虽然不难但是配置起来也是相当的繁琐,现在高德LBS开放平台推出了基于HTML5的地图组件,我们可以通过WebView直接用URL 以GET方式进行请求就可以实现位 ...
- 关于UITableView的黑线条
这里採用分组形式.底色可用图片覆盖,设置为cell(是一个view)的子视图,并把cell'的颜色设置为底色 当UITableView的cell没有满屏显示时,就会出现黑线条.我们仅仅需在初始化时,加 ...