HttpClientUtils.java
package com.vcredit.ddcash.batch.util;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
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.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* HttpClientUtils
*/
public class HttpClientUtils {
/**
* 日志工具
*/
private static final Logger logger = LoggerFactory.getLogger(HttpClientUtils.class);
/**
* 5分钟
*/
public static final int MINUTE_FIVE = 300000;
/**
* 10分钟
*/
public static final int MINUTE_TEN = 600000;
/**
* HttpClient
*/
private static final HttpClient client = getInstance();
/**
* 让Httpclient支持https
*
* @return HttpClient
*/
private static HttpClient getInstance() {
X509TrustManager x509mgr = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] xcs, String string) {
}
public void checkServerTrusted(X509Certificate[] xcs, String string) {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
SSLContext sslContext = null;
try {
sslContext = SSLContext.getInstance(SSLConnectionSocketFactory.SSL);
sslContext.init(null, new TrustManager[] { x509mgr }, null);
} catch (Exception e) {
logger.error("error to init httpclient", e);
}
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
connManager.setMaxTotal(400);// 客户端总并行链接最大数
connManager.setDefaultMaxPerRoute(40); // 每个主机的最大并行链接数
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
httpClientBuilder.setConnectionManager(connManager);
httpClientBuilder.setSSLSocketFactory(sslsf);
return httpClientBuilder.build();
}
public static final RequestConfig getDefaultTimeOutConfig() {
return getTimeOutConfig(60000, 30000);
}
private static final RequestConfig getTimeOutConfig(int socketTimeout, int connectionTimeout) {
return RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectionTimeout).build();
}
/**
* Get方法查询
*/
public static String getMethodGetResponse(String address) throws Exception {
return getMethodGetResponse(address, getDefaultTimeOutConfig());
}
/**
* Post方法查询
*/
public static String getMethodPostResponse(String address, HttpEntity paramEntity) throws Exception {
RequestConfig config = getDefaultTimeOutConfig();
return getMethodPostResponse(address, paramEntity, config);
}
/**
* 自定义超时的Get方法查询
*/
public static String getMethodGetResponse(String address, int connectionTimeout, int socketTimeout) throws Exception {
return getMethodGetResponse(address, getTimeOutConfig(socketTimeout, connectionTimeout));
}
/**
* 自定义超时的Post方法
*/
public static String getMethodPostResponse(String address, HttpEntity paramEntity, int connectionTimeout, int socketTimeout) throws Exception {
RequestConfig config = getTimeOutConfig(socketTimeout, connectionTimeout);
return getMethodPostResponse(address, paramEntity, config);
}
/**
* Post Entity
*/
public static byte[] getMethodPostBytes(String address, HttpEntity paramEntity) throws Exception {
return getMethodPostContent(address, paramEntity, getDefaultTimeOutConfig());
}
/**
* HttpClient get方法请求返回Entity
*/
public static byte[] getMethodGetContent(String address) throws Exception {
return getMethodGetContent(address, getDefaultTimeOutConfig());
}
/**
* HttpClient Get方法请求数据
*/
private static String getMethodGetResponse(String address, RequestConfig config) throws Exception {
logger.info("Start Access Address(" + address + ") With Get Request");
byte[] result = getMethodGetContent(address, config);
return new String(result, "utf-8");
}
/**
* HttpClient Post方法请求数据
*/
private static String getMethodPostResponse(String address, HttpEntity paramEntity, RequestConfig config) throws Exception {
logger.info("Begin Access Url(" + address + ") By Post");
byte[] content = getMethodPostContent(address, paramEntity, config);
String result = new String(content, "utf-8");
logger.info("Response -> " + result);
return result;
}
/**
* HttpClient get方法请求返回Entity
*/
private static byte[] getMethodGetContent(String address, RequestConfig config) throws Exception {
HttpGet get = new HttpGet(address);
try {
logger.info("Start Access Address(" + address + ") With Get Request");
get.setConfig(config);
HttpResponse response = client.execute(get);
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
int code = response.getStatusLine().getStatusCode();
throw new RuntimeException("HttpGet Access Fail , Return Code(" + code + ")");
}
response.getEntity().getContent();
return convertEntityToBytes(response.getEntity());
} finally {
if (get != null) {
get.releaseConnection();
}
}
}
/**
* Post Entity
*/
private static byte[] getMethodPostContent(String address, HttpEntity paramEntity, RequestConfig config) throws Exception {
HttpPost post = new HttpPost(address);
try {
if (paramEntity != null) {
post.setEntity(paramEntity);
}
post.setConfig(config);
HttpResponse response = client.execute(post);
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
int code = response.getStatusLine().getStatusCode();
throw new RuntimeException("HttpPost Request Access Fail Return Code(" + code + ")");
}
HttpEntity entity = response.getEntity();
if (entity == null) {
throw new RuntimeException("HttpPost Request Access Fail Response Entity Is null");
}
return convertEntityToBytes(entity);
} finally {
if (post != null) {
post.releaseConnection();
}
}
}
/**
* 转化返回为byte数组
*
* @param entity
* @return byte[]
* @throws Exception
*/
private static byte[] convertEntityToBytes(HttpEntity entity) throws Exception {
InputStream inputStream = null;
try {
if (entity == null || entity.getContent() == null) {
throw new RuntimeException("Response Entity Is null");
}
inputStream = entity.getContent();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.flush();
return out.toByteArray();
} finally {
if (inputStream != null) {
inputStream.close();
}
}
}
/**
* 甜橙小贷发送消息工具
* @param path
* @param params
* @return
* @throws Exception
*/
public static String post(String path,String params) throws Exception{
if(path.startsWith("https")){
return https(path,params);
}else{
return http(path,params);
}
}
public static String http(String path,String params) throws Exception{
HttpURLConnection httpConn=null;
BufferedReader in=null;
PrintWriter out=null;
try {
URL url=new URL(path);
httpConn=(HttpURLConnection)url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setDoInput(true);
httpConn.setDoOutput(true);
//发送post请求参数
out=new PrintWriter(httpConn.getOutputStream());
out.println(params);
out.flush();
//读取响应
if(httpConn.getResponseCode()==HttpURLConnection.HTTP_OK){
StringBuffer content=new StringBuffer();
String tempStr="";
in=new BufferedReader(new InputStreamReader(httpConn.getInputStream()));
while((tempStr=in.readLine())!=null){
content.append(tempStr);
}
return content.toString();
}else{
throw new Exception("请求出现了问题!");
}
} catch (IOException e) {
e.printStackTrace();
}finally{
in.close();
out.close();
httpConn.disconnect();
}
return null;
}
public static String https(String path,String params) throws Exception {
String res = null;
CloseableHttpClient client = HttpClientBuilder.create().build();
HttpPost request = new HttpPost(path);
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(10000).setConnectTimeout(2000).build();// 设置请求和传输超时时间
request.setConfig(requestConfig);
StringEntity myEntity = new StringEntity(params, "UTF-8");
try {
request.setEntity(myEntity);
CloseableHttpResponse response = client.execute(request);
res = EntityUtils.toString(response.getEntity());
return res;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (client != null) {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
}
Map<String, String> paramsMap = new HashMap<String, String>();
paramsMap.put("identitycard", request.getMobileAuthIdentity());
paramsMap.put("mobile", request.getMobile());
String paramJson = GsonUtils.toJson(paramsMap);
logger.info("isauthCollect->Request->" + paramJson);
String base64Content = Base64.encodeBase64String(paramJson.getBytes("utf-8"));
StringEntity paramEntity = new StringEntity(base64Content, "UTF-8");
String respJson = HttpClientUtils.getMethodPostResponse(url, paramEntity);
logger.info("isauthCollect->Response->" + respJson);
VBSCommonResponseDto result= GsonUtils.convertObj(respJson, VBSCommonResponseDto.class);
HttpClientUtils.java的更多相关文章
- Spring提供的用于访问Rest服务的客户端:RestTemplate实践
什么是RestTemplate? RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效 ...
- 调用外部接口支持https请求
1,创建RestTemplateConfig.java文件,内容如下: package com.htsec.monitor.internet.config;import com.htsec.monit ...
- 微信登录4-开发回调URL
一.准备 1.引入pom依赖 在要使用HttpClient的项目中加入依赖 <!--httpclient--> <dependency> <groupId>org. ...
- HttpClient客户端网络编程——高可用、高并发
本文是HttpClient的学习博客,RestTemplate是基于HttpClient的封装,feign可基于HttpClient进行网络通信. 那么作为较底层的客户端网络编程框架,该怎么配置使其能 ...
- SpringBoot+Maven 多模块项目的构建、运行、打包实战
前言 最近在做一个很复杂的会员综合线下线上商城大型项目,单模块项目无法满足多人开发和架构,很多模块都是重复的就想到了把模块提出来,做成公共模块,基于maven的多模块项目,也好分工开发,也便于后期微服 ...
- HttpClient 的Timeout waiting for connection from pool
Timeout waiting for connection from pool 异常 httpClient大家用到地方会很多,先简单描述一下几个关键配置的意义 httpClient版本为4.5.1 ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- HttpClientUtils
import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.List; import ...
- 包括post,get请求(http,https)的HttpClientUtils
package cn.knet.data.untils; import java.io.IOException; import java.net.SocketTimeoutException; imp ...
随机推荐
- SPOJ PHRASES 后缀数组
题目链接:http://www.spoj.com/problems/PHRASES/en/ 题意:给定n个字符串,求一个最长的子串至少在每个串中的不重叠出现次数都不小于2.输出满足条件的最长子串长度 ...
- [BZOJ 2957]楼房重建(THU2013集训)(分块思想)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2957 分析: 首先明确问题,对于每栋楼房的斜率K=H/X,问题就是问有多少个楼房的K比前面所有 ...
- DSP using MATLAB示例Example3.6
代码: n = [-5:5]; x = (-0.9).^n; % x(n) = k = -200:200; w = (pi/100)*k; % [0,pi] axis divided into 101 ...
- mongodb学习03 操作详解
插入文档 db.test.insert({"name":"jinks"}); 批量插入 db.test.insert([{}, {}, {}]); 一次批量插入 ...
- zepto的bug1
给页面<a>标签绑定了tap事件,在移动设备上点击按钮貌似一切正常,可以正常响应. 但是,把页面上下滑动几次之后,或者在滑动时手指滑动出移动屏幕之外,之后再点击按钮,就会发现第一次点击的时 ...
- ural 2062 Ambitious Experiment
2062. Ambitious Experiment Time limit: 3.0 secondMemory limit: 128 MB During several decades, scient ...
- CF# 334 Alternative Thinking
A. Alternative Thinking time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- [Noi2015]软件包管理器 题解
题目大意: 有n个软件安装包,除第一个以外,其他的要在另一个安装包的基础上安装,且无环,问在安装和卸载某个软件包时,这个操作实际上会改变多少个软件包的安装状态. 思路: 可构成树,用树链剖分,线段树. ...
- topcoder SRM 623 DIV2 CatchTheBeatEasy
比较简单的一题,纠结比较久的是把my_cmp和my_minus放在类中,利用sort函数会出现 no matching function for call to ""sort(st ...
- 洛谷 洛谷 P1011 车站 Label:续命模拟QAQ 未知50分
题目描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人.从第3站起( ...