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);

时间: 2024-10-11 17:49:20

HttpClientUtils.java的相关文章

Spring提供的用于访问Rest服务的客户端:RestTemplate实践

什么是RestTemplate? RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率.调用RestTemplate的默认构造函数,RestTemplate对象在底层通过使用java.net包下的实现创建HTTP 请求,可以通过使用ClientHttpRequestFactory指定不同的HTTP请求方式.ClientHttpRequestFactory接口主要提供了两种实现方式

Software caused connection abort: recv failed错误

java.net.SocketException: Software caused connection abort: recv failed    at java.net.SocketInputStream.socketRead0(Native Method)    at java.net.SocketInputStream.read(Unknown Source)    at java.net.SocketInputStream.read(Unknown Source)    at org.

Java:使用HttpClient进行POST和GET请求以及文件下载

1.HttpClient 大家可以先看一下HttpClient的介绍,这篇博文写的还算不错:http://blog.csdn.net/wangpeng047/article/details/19624529 当然,详细的文档,你可以去官方网站查看和下载:http://hc.apache.org/httpclient-3.x/ 2.本博客简单介绍一下POST和GET以及文件下载的应用. 代码如下: package net.mobctrl; import java.io.ByteArrayOutpu

Java 爬虫工具Jsoup解析

Jsoup是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址.HTML 文本内容.它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据. jsoup 的主要功能如下: 1. 从一个 URL,文件或字符串中解析 HTML: 2. 使用 DOM 或 CSS 选择器来查找.取出数据: 3. 可操作 HTML 元素.属性.文本: jsoup 是基于 MIT 协议发布的,可放心使用于商业项目. jsoup 可以从包括字符串.URL

【fastweixin框架教程3】JAVA进行HTTPS网站访问,PKIX path building failed解决方法

上几篇文章我们谈到fastweixin使用问题和修改. 今天的问题就是使用JAVA访问HTTPS网站时候经常出现javax.net.ssl.SSLHandshakeException javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderEx

java.lang.IllegalStateException: Connection pool shut down

最近使用HttpClient 4.5 使用 CloseableHttpClient 发起连接后,使用CloseableHttpResponse 接受返回结果,结果就报错了,上网查了下,有位stackoverflow的大兄弟说,只要将: CloseableHttpClient httpClient = HttpClients.createDefault(); 改为: CloseableHttpClient httpClient = HttpClients.custom().setConnectio

HttpClientUtils封装

增加maven配置 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</gr

Java爬虫系列之实战:爬取酷狗音乐网 TOP500 的歌曲

在前面分享的两篇随笔中分别介绍了HttpClient和Jsoup以及简单的代码案例: Java爬虫系列二:使用HttpClient抓取页面HTML Java爬虫系列三:使用Jsoup解析HTML 今天就来实战下,用他们来抓取酷狗音乐网上的 Top500排行榜音乐.接下来的代码中除了会用到HttpClient和Jsoup之外,还会用到log4j和ehcache,分别用来记录日志和实现缓存,如果看官对这两个不是很熟悉的话,请自行百度,现在网上的入门实例有很多,我就不专门记笔记了. 那为什么会想到爬取

java httpclient工具类

meven <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency> -- 代码 import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.