import java.io.IOException;
import java.nio.charset.Charset;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import javax.net.ssl.SSLContext; import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
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.client.utils.URIBuilder;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContextBuilder;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; public class HttpClient { private final static String ENCODE = "utf-8"; private final static Charset CHARSET = Charset.forName("utf-8"); private final static int SOCKET_TIME_OUT = 12000; private final static int SOCKET_CONNECT_OUT = 12000; private final static int CONNECTION_REQUEST_OUT = 12000; private static RequestConfig defaultRequestConfig = RequestConfig.custom().setSocketTimeout(SOCKET_TIME_OUT)
.setConnectTimeout(SOCKET_CONNECT_OUT).setConnectionRequestTimeout(CONNECTION_REQUEST_OUT).build(); private static ObjectMapper objectMapper = new ObjectMapper(); private static final Logger LOG = LoggerFactory.getLogger(HttpClient.class); @SuppressWarnings("deprecation")
public static SSLConnectionSocketFactory sslInit() {
SSLContext sslContext = null;
try {
sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
// 信任所有
public boolean isTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException {
return true;
}
}).build(); } catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
return new SSLConnectionSocketFactory(sslContext);
} /**
* @Description post请求函数
* @param scheme http/https
* @param host 请求域名
* @param path 请求路径
* @param params URL请求参数
* @param jsonBody HTTP请求BODY
* @param headers HTTP请求头部
* @return
*/
public static HashMap post(String scheme, String host, String path, Map<String, String> params, String jsonBody, Map<String, String> headers) {
HashMap resultMap = new HashMap();
CloseableHttpClient closeableHttpClient = null;
try {
SSLConnectionSocketFactory sslsf = sslInit();
closeableHttpClient = HttpClientBuilder.create().setDefaultRequestConfig(defaultRequestConfig).setSSLSocketFactory(sslsf).build(); //添加URL参数
List<NameValuePair> values = new ArrayList<NameValuePair>();
if (params != null && !params.isEmpty()) {
for (String s : params.keySet()) {
values.add(new BasicNameValuePair(s, params.get(s)));
}
}
//创建URI
java.net.URI uri = new URIBuilder()
.setScheme(scheme)
.setHost(host)
.setPath(path)
.setParameters(values)
.build(); HttpPost httpPost = new HttpPost(uri);
//添加头部
if (headers != null && !headers.isEmpty()) {
for (String s : headers.keySet()) {
httpPost.addHeader(s, headers.get(s));
}
}
//添加URL参数
/*if (params != null && !params.isEmpty()) {
List<NameValuePair> values = new ArrayList<NameValuePair>();
for (String s : params.keySet()) {
values.add(new BasicNameValuePair(s, params.get(s)));
}
httpPost.setEntity(new UrlEncodedFormEntity(values, ENCODE));
}*/ //添加请求BODY
if (jsonBody != null) {
httpPost.setEntity(new StringEntity(jsonBody, Charset.forName("utf-8")));
} LOG.info("HTTP Request URI:{}",httpPost.getURI().toString());
LOG.info("HTTP Request Body: {}",jsonBody); //发出请求
CloseableHttpResponse response = closeableHttpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
String content = EntityUtils.toString(entity, ENCODE);
LOG.info("HTTP Response:{}",content); if(StringUtils.isNotBlank(content)){
resultMap = objectMapper.readValue(content, HashMap.class);
}
} catch (Exception e) {
LOG.info("Error msg:[{}]",e.getMessage());
e.printStackTrace();
} finally {
try {
if (closeableHttpClient != null) {
closeableHttpClient.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return resultMap;
} /**
* @Description http get请求函数
* @param scheme http/https
* @param host 域名
* @param path 资源路径
* @param params 请求参数
* @param headers 请求头部
* @return
*/
public static HashMap get(String scheme, String host, String path, Map<String, String> params, Map<String, String> headers) {
HashMap resultMap = new HashMap();
CloseableHttpClient closeableHttpClient = null;
try {
SSLConnectionSocketFactory sslsf = sslInit();
closeableHttpClient = HttpClientBuilder.create().setDefaultRequestConfig(defaultRequestConfig).setSSLSocketFactory(sslsf).build(); //添加URL参数
List<NameValuePair> values = new ArrayList<NameValuePair>();
if (params != null && !params.isEmpty()) {
for (String s : params.keySet()) {
values.add(new BasicNameValuePair(s, params.get(s)));
}
} //创建URI
java.net.URI uri = new URIBuilder()
.setScheme(scheme)
.setHost(host)
.setPath(path)
.setParameters(values)
.build(); LOG.info("URI is:{}",uri.toString());
//创建GET请求对象
HttpGet httpGet = new HttpGet(uri); //添加头部
if (headers != null && !headers.isEmpty()) {
for (String s : headers.keySet()) {
httpGet.addHeader(s, headers.get(s));
}
} //发出请求
LOG.info("HTTP Request:{}",httpGet.getURI().toString());
CloseableHttpResponse response = closeableHttpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
String content = EntityUtils.toString(entity, ENCODE);
LOG.info("HTTP Response:{}",content); if(StringUtils.isNotBlank(content)){
resultMap = objectMapper.readValue(content, HashMap.class);
}
} catch (Exception e) {
LOG.info("Error msg:[{}]",e.getMessage());
e.printStackTrace();
} finally {
try {
if (closeableHttpClient != null) {
closeableHttpClient.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return resultMap;
} }

JAVA API about HTTP 2的更多相关文章

  1. Atitit 图像处理 调用opencv 通过java  api   attilax总结

    Atitit 图像处理 调用opencv 通过java  api   attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...

  2. 【分布式】Zookeeper使用--Java API

    一.前言 上一篇博客我们通过命令行来操作Zookeper的客户端和服务端并进行相应的操作,这篇主要介绍如何通过API(JAVA)来操作Zookeeper. 二.开发环境配置 首先打开Zookeeper ...

  3. Elasticsearch的CRUD:REST与Java API

    CRUD(Create, Retrieve, Update, Delete)是数据库系统的四种基本操作,分别表示创建.查询.更改.删除,俗称"增删改查".Elasticsearch ...

  4. [转]HDFS中JAVA API的使用

    HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的 ...

  5. HDFS中JAVA API的使用

    HDFS中JAVA API的使用   HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的 ...

  6. java安全沙箱(四)之安全管理器及Java API

    java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...

  7. Java api 入门教程 之 JAVA的Random类

    在实际的项目开发过程中,经常需要产生一些随机数值,例如网站登录中的校验数字等,或者需要以一定的几率实现某种效果,例如游戏程序中的物品掉落等. 在Java API中,在java.util包中专门提供了一 ...

  8. (转)Java API设计清单

    转自: 伯乐在线 Java API设计清单 英文原文 TheAmiableAPI 在设计Java API的时候总是有很多不同的规范和考量.与任何复杂的事物一样,这项工作往往就是在考验我们思考的缜密程度 ...

  9. 【hadoop2.6.0】利用Hadoop的 Java API

    Hadoop2.6.0的所有Java API都在 http://hadoop.apache.org/docs/r2.6.0/api/overview-summary.html 里. 下面实现一个利用J ...

  10. 使用函数库(JAVA API)

    /*使用函数库(JAVA API) * 在JAVA的API里类被封装在一个个的package,要使用package的类之前必须 * 要知道这个类属于哪个package * 引用类方式: * 1.通过i ...

随机推荐

  1. 你真的懂return吗?

    递归算法中什么时候用return啥时候不用呢? 使用2个例子来说明:快速排序和二分查找 # 二分查找def binarySearch (arr, l, r, x): # 基本判断 if r >= ...

  2. 20140725 快速排序时间复杂度 sTL入门

    1.快速排序的时间复杂度(平均时间复杂度为) 数组本身就有序时,效果很差为O(n^2) 2.STl入门 (1) C++内联函数(inline)和C中宏(#define)区别 内联函数有类型检查,宏定义 ...

  3. VSCode 中文乱码

    方式一 vscode 菜单栏:  文件 >> 首选项 >> 设置 搜索: "files.autoGuessEncoding": false, 改为: &qu ...

  4. Unity中对注册表进行修改

    问题背景: PC端软件开发,当我在Unity中的PlayerSetting中设置好分辨率,每次打包运行后会记忆上次退出时窗口的分辨率(记忆窗口状态),导致下次打开时不是PlayerSetting中的初 ...

  5. 2019-4-29-.NET-Standard

    title author date CreateTime categories .NET Standard lindexi 2019-4-29 12:7:26 +0800 2018-2-13 17:2 ...

  6. vmstat - 报告虚拟内存的统计信息

    总览 vmstat [-n] [延时[次数]] vmstat [-V] 描述 vmstat 对系统的进程情况.内存使用情况.交换页和 I/O 块使用情况.中断以及 CPU 使用情况进行统计并报告相应的 ...

  7. BeanUtils.copyProperties用法

    spring的BeanUtils.copyProperties用法 原创 2010年06月03日 13:43:00 标签: spring / struts / 数据库 / 工具 / action 一. ...

  8. Go 静态类型声明

    Go 静态类型声明 package main import "fmt" func main() { var x float64 x = 20.0 fmt.Println(x) fm ...

  9. SCOI 2014 省选总结

    总的来说作为高一党,去做省选难度的题完全就是去玩的,还是找惯例起身跪hja. 跪毕,看看自己惨不忍睹的成绩,我只想说:电子坑大为什么day1的暴力只有10分!为什么呢?我笑看题面: 方伯伯种玉米,方伯 ...

  10. Linux/Mac中alias的使用

    最近在设置代理的时候,每次手写不方便,想起linux有个alias命令可以用,防止忘记,这边记录一下 一.alias 设置 1.设置别名 proxy # 1. # 设置别名前,使用 `type 自定义 ...