带SSL证书的httpclient 远程接口工具类
package com.iups.wx.util; import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;
import java.util.Map.Entry; import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager; import net.sf.json.JSONObject; import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger; /**
* 调用远程接口工具类
* @author Administrator
* @date 2017年2月16日 13:44:03
*/
public class HttpsClientUtil { //日志
public static Logger log = Logger.getLogger(HttpsClientUtil.class);
//编码方式
private static String UTF8 = "UTF-8";
//数据格式
private final String APPLICATION_JSON = "application/json";
//数据类型标识
public final String CONTENT_TYPE = "Content-Type";
//https请求客户端
private CloseableHttpClient httpclient = null; private static HttpsClientUtil httpsClientUtil; private HttpsClientUtil(){
try{
// 创建SSLContext对象,并使用我们指定的信任管理器初始化
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, new TrustManager[]{
//证书信任管理器(用于https请求)
new X509TrustManager(){
@Override
public void checkClientTrusted(X509Certificate[] arg0,
String arg1) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] arg0,
String arg1) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
}, new SecureRandom());
//获取注册建造者
RegistryBuilder<ConnectionSocketFactory> registryBuilder = RegistryBuilder.create();
//注册http和https请求
Registry<ConnectionSocketFactory> socketFactoryRegistry = registryBuilder.register("http", PlainConnectionSocketFactory.INSTANCE)
.register("https", new SSLConnectionSocketFactory(sslContext))
.build();
//获取HttpClient池管理者
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
//初始化httpClient
httpclient = HttpClients.custom().setConnectionManager(connManager).build();
}catch(KeyManagementException e){
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}; /**
* 创建httpsClientUtil对象
* @return
*/
public static HttpsClientUtil getInstance(){
if(httpsClientUtil==null){
httpsClientUtil = new HttpsClientUtil();
}
return httpsClientUtil;
} /**
* 描述: 发送post or get请求并获取结果
* @param requestUrl 请求地址
* @param requestMethod 请求方式(GET、POST)
* @param outputStr 提交的数据
* @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
*/
public JSONObject sendRequest(String requestUrl, String requestMethod, String outputStr){
String responseObj = null;
CloseableHttpResponse execute = null;
try{
if("POST".equals(requestMethod)){
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.addHeader(CONTENT_TYPE, APPLICATION_JSON);
// 将JSON字符串进行UTF-8编码,以便传输中文
StringEntity requestEntity = new StringEntity(outputStr,HttpsClientUtil.UTF8);
httpPost.setEntity(requestEntity);
execute = httpclient.execute(httpPost);
}else{
HttpGet httpGet = new HttpGet(requestUrl);
httpGet.addHeader(CONTENT_TYPE, APPLICATION_JSON);
execute = httpclient.execute(httpGet);
}
HttpEntity responseEntity = execute.getEntity();
if(responseEntity!=null){
responseObj = EntityUtils.toString(responseEntity,HttpsClientUtil.UTF8);
}
}catch(UnsupportedEncodingException e){
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
//关闭响应流
if(execute!=null) execute.close();
} catch (IOException e) {
e.printStackTrace();
}
}
log.info("远程接口响应:"+responseObj);
return JSONObject.fromObject(responseObj);
} /**
* 描述: 发送post请求并获取结果
* @param requestUrl 请求地址
* @param requestUrlParam 请求地址拼接参数
* @param outputStr 提交的数据
* @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
*/
public JSONObject sendPostRequest(String requestUrl,Map<String,String> requestUrlParam, String outputStr){
return sendRequest(requestUrlParam(requestUrl, requestUrlParam), "POST", outputStr);
} /**
* 描述: 发送get请求并获取结果
* @param requestUrl 请求地址
* @param requestUrlParam 请求地址拼接参数
* @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
*/
public JSONObject sendGetRequest(String requestUrl,Map<String,String> requestUrlParam){
return sendRequest(requestUrlParam(requestUrl, requestUrlParam), "GET", null);
} /**
* 描述:拼接URL后接参数
* @param requestUrl 请求地址
* @param requestUrlParam 请求地址拼接参数
* @return 带参数请求地址
*/
public String requestUrlParam(String requestUrl,Map<String,String> requestUrlParam){
if(requestUrlParam==null){
return requestUrl;
}
String requestParam = "";
for (Entry<String, String> entry : requestUrlParam.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
requestParam += "&"+key+"="+value;
}
if(requestParam.length()>0){
if(requestUrl.indexOf("?")==-1){
requestUrl = requestUrl+"?"+requestParam.substring(1);
}else{
requestUrl = requestUrl+requestParam;
}
}
return requestUrl;
} }
带SSL证书的httpclient 远程接口工具类的更多相关文章
- Java模拟http请求调用远程接口工具类
package ln; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea ...
- HttpClient远程接口调用-实名认证
1.HttpClient远程接口调用 1)用户注册 注册按钮button提交表单时,要return false form表单 <!-- action="http://localhost ...
- Spring 远程调用工具类RestTemplateUtils
Spring 远程调用Rest服务工具类,包含Get.Post.Put.Delete四种调用方式. 依赖jar <dependency> <groupId>org.spring ...
- Utils--前台调用后台接口工具类
Utils--前台调用后台接口工具类 package com.taotao.manage.httpclient; import java.io.IOException; import java.net ...
- HttpClient 远程接口调用方式
远程接口调用方式HttpClient 问题:现在我们已经开发好了接口了,那该如何调用这个接口呢? 答:使用Httpclient客户端. Httpclient简介 什么是httpclient Htt ...
- SSL证书详解和CFSSL工具使用
公钥基础设施(PKI) 基础概念 CA(Certification Authority)证书,指的是权威机构给我们颁发的证书. 密钥就是用来加解密用的文件或者字符串.密钥在非对称加密的领域里,指的是私 ...
- 带jsk证书,请求https接口
首先是三个返回的实体类 BaseVo.java package https2; import java.io.Serializable; import java.lang.reflect.Invoca ...
- 用nodejs快速实现websocket服务端(带SSL证书生成)
有不少公司将nodejs的socket.io作为websocket的解决方案,很遗憾的是socket.io是对websocket的封装,并不支持html5原始的websocket协议,微信小程序使用的 ...
- HTTP接口开发专题二(发送http请求的接口工具类)
import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; imp ...
随机推荐
- Faster R-CNN利用新的网络结构来训练
前言 最近利用Faster R-CNN训练数据,使用ZF模型,效果无法有效提高.就想尝试对ZF的网络结构进行改造,记录下具体操作. 一.更改网络,训练初始化模型 这里为了方便,我们假设更换的网络名为L ...
- hdu4691(后缀数组)
算是后缀数组的入门题吧. 思路无比简单,要是直接套模板的话应该很容易秒掉. 关于后缀数组看高中神犇的论文就可以学会了 算法合集之<后缀数组——处理字符串的有力工具> 话说这题暴力是可以过了 ...
- 160620、利用 jQuery UI 和 Ajax 创建可定制的 Web 界面
如今,网站比以往更具可定制性,允许用户更改其空间,根据自己的喜好对其进行个性化.个性化的主页或仪表板页面(例如 iGoogle.MyYahoo! 和 MyAOL)日渐普及,大多数 Web 应用程序内甚 ...
- 解决"django-registration(1048,“column”last_login“不能为null”)
去数据库(MySQL终端): 1.查看django_migrations表的信息.如果你看到一些记录,删除它们(如果migrations目录下有原来的配置,需要清除). mysql> SELEC ...
- oracle mysql sqlserver 基本操作命令
1.oracle (1) 启动 监听 lsnrctl start: (2)进入sqlplus界面 sqlplus /nolog SQL>conn sys/jiaxiaoai@orcl as s ...
- Backtracking is a form of recursion.
w https://www.cis.upenn.edu/~matuszek/cit594-2012/Pages/backtracking.html Starting at Root, your opt ...
- UTF-8具体解释
UTF-8是一种变长字节的编码方式.它以8位(1字节)为单位对Unicode进行编码. UTF-8理论上最多能够达到6字节长.但眼下全世界的字符仅仅须要4字节就能够表示完. UTF-8规定,对于某一字 ...
- PHP使用Mongodb
一.安装Mongodb的PHP扩展 wget http://pecl.php.net/get/mongo-1.2.7.tgz //下载扩展包tar zxvf mongo-1.2.7.tgzcd mon ...
- python全栈开发从入门到放弃之字符编码
一 了解字符编码的知识储备 1. 计算机基础知识(三幅图) 2. 文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开编辑器就打开了启动了一个进程,是在内存中 ...
- LeetCode:N叉树的后序遍历【590】
LeetCode:N叉树的后序遍历[590] 题目描述 给定一个 N 叉树,返回其节点值的后序遍历. 例如,给定一个 3叉树 : 返回其后序遍历: [5,6,3,2,4,1]. 题目分析 这道题有好几 ...