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 远程接口工具类的更多相关文章

  1. Java模拟http请求调用远程接口工具类

    package ln; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea ...

  2. HttpClient远程接口调用-实名认证

    1.HttpClient远程接口调用 1)用户注册 注册按钮button提交表单时,要return false form表单 <!-- action="http://localhost ...

  3. Spring 远程调用工具类RestTemplateUtils

    Spring 远程调用Rest服务工具类,包含Get.Post.Put.Delete四种调用方式. 依赖jar <dependency> <groupId>org.spring ...

  4. Utils--前台调用后台接口工具类

    Utils--前台调用后台接口工具类 package com.taotao.manage.httpclient; import java.io.IOException; import java.net ...

  5. HttpClient 远程接口调用方式

    远程接口调用方式HttpClient 问题:现在我们已经开发好了接口了,那该如何调用这个接口呢? 答:使用Httpclient客户端.   Httpclient简介 什么是httpclient Htt ...

  6. SSL证书详解和CFSSL工具使用

    公钥基础设施(PKI) 基础概念 CA(Certification Authority)证书,指的是权威机构给我们颁发的证书. 密钥就是用来加解密用的文件或者字符串.密钥在非对称加密的领域里,指的是私 ...

  7. 带jsk证书,请求https接口

    首先是三个返回的实体类 BaseVo.java package https2; import java.io.Serializable; import java.lang.reflect.Invoca ...

  8. 用nodejs快速实现websocket服务端(带SSL证书生成)

    有不少公司将nodejs的socket.io作为websocket的解决方案,很遗憾的是socket.io是对websocket的封装,并不支持html5原始的websocket协议,微信小程序使用的 ...

  9. HTTP接口开发专题二(发送http请求的接口工具类)

    import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; imp ...

随机推荐

  1. 阿里面试经历JAVA总结

    为记录阿里的电面经历,特与大家分享,岗位是JAVA研发工程师. 一面主要问题如下: 1)首先自我介绍 2)数据结构算法的基本问题,如排序算法,二叉树遍历,后序遍历非递归,图的最短路径问题 3)对一个数 ...

  2. 3162 抄书问题(划分dp)

    3162 抄书问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 现在要把M本有顺序的书分给K个人复制( ...

  3. Leetcode-Resotre IP Addresses

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  4. [Algorithms] Longest Increasing Subsequence

    The Longest Increasing Subsequence (LIS) problem requires us to find a subsequence t of a given sequ ...

  5. java倒序输出List

    先贴代码 package com.tsubasa.collection; import java.util.ArrayList; import java.util.Arrays; import jav ...

  6. python之MongoDB学习

    import pymongo as pm # 获取连接 client = pm.MongoClient('localhost', 27017) # 端口号是数值型 # 连接数据库 db = clien ...

  7. docker运行oracle11g

    image docker pull registry.cn-hangzhou.aliyuncs.com/qida/oracle-xe-11g 或者自己自动添加表 create role test_ro ...

  8. 决策树ID3算法python实现 -- 《机器学习实战》

    from math import log import numpy as np import matplotlib.pyplot as plt import operator #计算给定数据集的香农熵 ...

  9. [PowerShell]–Checking the version of Office installed

    – Create and initialize the object $objExcel = New-Object -ComObject Excel.Application – Query the v ...

  10. 剑指Offer——斐波那契数列

    题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.n<=39 分析: 递归解法肯定相当耗时. 因为当n=4时,程序是这样子递归运算的:Fibonacci( ...