httpClient连接工具类实测可用
package com.jeecms.common.util; import com.google.gson.Gson;
import com.jeecms.cms.api.Constants;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
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.methods.HttpRequestBase;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
import org.apache.http.conn.ssl.SSLSocketFactory;
import sun.java2d.opengl.OGLContext; import javax.annotation.Resource;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.*;
import java.net.URI;
import java.nio.charset.Charset;
import java.util.*;
import java.util.Map.Entry;
/**
* @ Author :YanTingXiang
* @ Date :Created in 2019-06-10
* @ Description:
* @Version : 1.0
*/
@Slf4j
public class HttpClientUtil {
@Resource
private Gson gson; private static HttpClientUtil instance;
protected Charset charset;
private int timeOut=10000;//10s download not set timeout public static DefaultHttpClient getHttpsClient() {
try {
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() { public void checkClientTrusted(
java.security.cert.X509Certificate[] chain,
String authType)
throws java.security.cert.CertificateException {
} public void checkServerTrusted(
java.security.cert.X509Certificate[] chain,
String authType)
throws java.security.cert.CertificateException {
} public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
} };
DefaultHttpClient client = new DefaultHttpClient();
ctx.init(null, new TrustManager[] { tm }, null);
SSLSocketFactory ssf = new SSLSocketFactory(ctx); ClientConnectionManager ccm = client.getConnectionManager();
SchemeRegistry sr = ccm.getSchemeRegistry();
// 设置要使用的端口,默认是443
sr.register(new Scheme("https", 443, ssf));
return client;
} catch (Exception ex) {
return null;
}
} private HttpClientUtil(){} public static HttpClientUtil getInstance() {
return getInstance(Charset.defaultCharset());
} public static HttpClientUtil getInstance(Charset charset){
if(instance == null){
instance = new HttpClientUtil();
}
instance.setCharset(charset);
return instance;
} public void setCharset(Charset charset) {
this.charset = charset;
} /**
* post请求
*/
public String doPost(String url) throws Exception {
return doPost(url, null, null);
}
public String doPostByHeader(String url,Map<String, String> header) throws Exception {
return doPost(url, null, header);
}
public String doPost(String url, Map<String, Object> params) throws Exception {
return doPost(url, params, null);
} public String doPost(String url, Map<String, Object> params, Map<String, String> header) throws Exception {
String body = null;
try {
// Post请求
log.debug(" protocol: POST");
log.debug(" url: " + url);
HttpPost httpPost = new HttpPost(url.trim());
RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(timeOut) .setConnectTimeout(timeOut).setSocketTimeout(timeOut).build();
httpPost.setConfig(requestConfig);
// 设置参数
if (null != params && !header.isEmpty()){
log.debug(" params: " + gson.toJson(params));
httpPost.setEntity(new UrlEncodedFormEntity(map2NameValuePairList(params), charset));
}
// 设置Header
if (header != null && !header.isEmpty()) {
log.debug(" header: " + header.get(Constants.HEADER_KEY_TOKEN));
for (Iterator<Map.Entry<String, String>> it = header.entrySet().iterator(); it.hasNext();) {
Map.Entry<String, String> entry = (Entry<String, String>) it.next();
httpPost.setHeader(new BasicHeader(entry.getKey(), entry.getValue()));
}
}
// 发送请求,获取返回数据
body = execute(httpPost);
} catch (Exception e) {
throw e;
}
log.debug(" result: " + body);
return body;
} /**
* postJson请求
*/
public String doPostJson(String url, Map<String, Object> params) throws Exception {
return doPostJson(url, params, null);
} public String doPostJson(String url, Map<String, Object> params, Map<String, String> header) throws Exception {
String json = null;
if (params != null && !params.isEmpty()) {
for (Iterator<Entry<String, Object>> it = params.entrySet().iterator(); it.hasNext();) {
Map.Entry<String, Object> entry = (Entry<String, Object>) it.next();
Object object = entry.getValue();
if (object == null) {
it.remove();
}
}
json = gson.toJson(params);
//json = JSON.toJSON(params);
}
return postJson(url, json, header);
} public String doPostJson(String url, String json) throws Exception {
return doPostJson(url, json, null);
} public String doPostJson(String url, String json, Map<String, String> header) throws Exception {
return postJson(url, json, header);
} private String postJson(String url, String json, Map<String, String> header) throws Exception {
String body = null;
try {
// Post请求
log.debug(" protocol: POST");
log.debug(" url: " + url);
HttpPost httpPost = new HttpPost(url.trim());
RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(timeOut) .setConnectTimeout(timeOut).setSocketTimeout(timeOut).build();
httpPost.setConfig(requestConfig);
// 设置参数
log.debug(" params: " + json);
StringEntity entity = new StringEntity(json, ContentType.DEFAULT_TEXT.withCharset(charset));
httpPost.setEntity(entity);
httpPost.setHeader(new BasicHeader("Content-Type", "application/json"));
log.debug(" type: JSON");
// 设置Header
if (header != null && !header.isEmpty()) {
log.debug(" header: " + gson.toJson(header));
for (Iterator<Entry<String, String>> it = header.entrySet().iterator(); it.hasNext();) {
Map.Entry<String, String> entry = (Entry<String, String>) it.next();
httpPost.setHeader(new BasicHeader(entry.getKey(), entry.getValue()));
}
}
// 发送请求,获取返回数据
body = execute(httpPost);
} catch (Exception e) {
throw e;
}
log.debug(" result: " + body);
return body;
} /**
* get请求
*/
public String doGet(String url) throws Exception {
return doGet(url, null, null);
} public String doGet(String url, Map<String, String> header) throws Exception {
return doGet(url, null, header);
} public String doGet(String url, Map<String, Object> params, Map<String, String> header) throws Exception {
String body = null;
try {
// Get请求
log.debug("protocol: GET");
HttpGet httpGet = new HttpGet(url.trim());
RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(timeOut) .setConnectTimeout(timeOut).setSocketTimeout(timeOut).build();
httpGet.setConfig(requestConfig);
// 设置参数
if (params != null && !params.isEmpty()) {
String str = EntityUtils.toString(new UrlEncodedFormEntity(map2NameValuePairList(params), charset));
String uri = httpGet.getURI().toString();
if(uri.indexOf("?") >= 0){
httpGet.setURI(new URI(httpGet.getURI().toString() + "&" + str));
}else {
httpGet.setURI(new URI(httpGet.getURI().toString() + "?" + str));
}
}
log.debug(" url: " + httpGet.getURI());
// 设置Header
if (header != null && !header.isEmpty()) {
log.debug(" header: " + header);
for (Iterator<Entry<String, String>> it = header.entrySet().iterator(); it.hasNext();) {
Map.Entry<String, String> entry = (Entry<String, String>) it.next();
httpGet.setHeader(new BasicHeader(entry.getKey(), entry.getValue()));
}
}
// 发送请求,获取返回数据
body = execute(httpGet);
} catch (Exception e) {
throw e;
}
log.debug(" result: " + body);
return body;
} /**
* 下载文件
*/
public void doDownload(String url, String path) throws Exception {
download(url, null, path);
} public void doDownload(String url, Map<String, Object> params, String path) throws Exception {
download(url, params, path);
} /**
* 上传文件
*/
public String doUpload(String url, String name, String path) throws Exception {
Map<String, Object> params = new HashMap<String, Object>();
params.put(name, new File(path));
return doUpload(url, params);
} public String doUpload(String url, Map<String, Object> params) throws Exception {
String body = null;
// Post请求
HttpPost httpPost = new HttpPost(url.trim());
// 设置参数
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
entityBuilder.setCharset(charset);
if (params != null && !params.isEmpty()) {
Iterator<String> it = params.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
Object value = params.get(key);
if (value instanceof File) {
FileBody fileBody = new FileBody((File) value);
entityBuilder.addPart(key, fileBody);
} else {
entityBuilder.addPart(key, new StringBody(String.valueOf(value), ContentType.DEFAULT_TEXT.withCharset(charset)));
}
}
}
HttpEntity entity = entityBuilder.build();
httpPost.setEntity(entity);
// 发送请求,获取返回数据
body = execute(httpPost);
return body;
} private void download(String url, Map<String, Object> params, String path) throws Exception {
// Get请求
HttpGet httpGet = new HttpGet(url.trim());
if (params != null && !params.isEmpty()) {
// 设置参数
String str = EntityUtils.toString(new UrlEncodedFormEntity(map2NameValuePairList(params)));
String uri = httpGet.getURI().toString();
if (uri.indexOf("?") >= 0) {
httpGet.setURI(new URI(httpGet.getURI().toString() + "&" + str));
} else {
httpGet.setURI(new URI(httpGet.getURI().toString() + "?" + str));
}
}
// 发送请求,下载文件
downloadFile(httpGet, path);
} private void downloadFile(HttpRequestBase requestBase, String path) throws Exception {
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
CloseableHttpResponse response = httpclient.execute(requestBase);
try {
HttpEntity entity = response.getEntity(); if (entity != null) {
byte[] b = EntityUtils.toByteArray(entity);
OutputStream out = new BufferedOutputStream(new FileOutputStream(new File(path)));
out.write(b);
out.flush();
out.close();
}
EntityUtils.consume(entity);
} catch (Exception e) {
throw e;
} finally {
response.close();
}
} catch (Exception e) {
throw e;
} finally {
httpclient.close();
}
} private String execute(HttpRequestBase requestBase) throws Exception {
CloseableHttpClient httpclient = getHttpsClient();
HttpParams params=httpclient.getParams();
params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, timeOut);
params.setParameter(CoreConnectionPNames.SO_TIMEOUT, timeOut);
String body = null;
try {
CloseableHttpResponse response = httpclient.execute(requestBase);
try {
HttpEntity entity = response.getEntity(); if (entity != null) {
body = EntityUtils.toString(entity, charset.toString());
}
EntityUtils.consume(entity);
} catch (Exception e) {
throw e;
}finally {
response.close();
}
} catch (Exception e) {
throw e;
} finally {
httpclient.close();
}
return body;
} private List<NameValuePair> map2NameValuePairList(Map<String, Object> params) {
if (params != null && !params.isEmpty()) {
List<NameValuePair> list = new ArrayList<NameValuePair>();
Iterator<String> it = params.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
if(params.get(key) != null) {
String value = String.valueOf(params.get(key));
list.add(new BasicNameValuePair(key, value));
}
}
return list;
}
return null;
} public void downLoad(String url, String localFileName) {
DefaultHttpClient httpClient = new DefaultHttpClient();
OutputStream out = null;
InputStream in = null; try {
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity entity = httpResponse.getEntity();
in = entity.getContent(); long length = entity.getContentLength();
if (length <= 0) {
System.out.println("下载文件不存在!");
return;
} System.out.println("The response value of token:" + httpResponse.getFirstHeader("token")); File file = new File(localFileName);
if(!file.exists()){
file.createNewFile();
} out = new FileOutputStream(file);
byte[] buffer = new byte[4096];
int readLength = 0;
while ((readLength=in.read(buffer)) > 0) {
byte[] bytes = new byte[readLength];
System.arraycopy(buffer, 0, bytes, 0, readLength);
out.write(bytes);
} out.flush(); }catch (Exception e){
e.printStackTrace();
}finally{
try {
if(in != null){
in.close();
}
} catch (IOException e) {
e.printStackTrace();
} try {
if(out != null){
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
} }
httpClient连接工具类实测可用的更多相关文章
- android开发网络连接工具类(一)
网络连接工具类整理: package com.gzcivil.utils; import java.io.IOException; import java.util.ArrayList; import ...
- Sublime3和Chrome配置自动刷新网页【实测可用】
SublimeText2下的LiveReload在SublimeText3下无法正常使用,本文整理SublimeText3安装LiveReload的方法.win7下实测可用! 安装成功后,就不需要再手 ...
- 实测可用的免费STUN服务器!
实测可用的免费STUN服务器! 以实际ping延迟排序: stun.voipbuster.com 287ms stun.wirlab.net 320ms s1.taraba.net ...
- 数据库连接工具类——包含取得连接和关闭资源 ConnUtil.java
package com.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepare ...
- 数据库连接工具类 数据库连接工具类——仅仅获得连接对象 ConnDB.java
package com.util; import java.sql.Connection; import java.sql.DriverManager; /** * 数据库连接工具类——仅仅获得连接对 ...
- 刚破了潘金莲的身份信息(图片文字识别),win7、win10实测可用(免费下载)
刚破了潘金莲的身份信息(图片文字识别),win7.win10实测可用 效果如下: 证照,车牌.身份证.名片.营业执照 等图片文字均可识别 电脑版 本人出品 大小1.3MB 下载地址:https://p ...
- JDBC实例--通过连接工具类DBUtil +配置文件来获取连接数据库,方便又快捷
根据前面的连接方法,还有缺点就是,如果人家要换数据库,还得改动源代码,然后还要编译什么的.这样客户修改也不容易. 做法:我们写一个配置文件,把该数据写在配置文件上面,然后通过类来加载改文件,然后读取相 ...
- Java开发小技巧(五):HttpClient工具类
前言 大多数Java应用程序都会通过HTTP协议来调用接口访问各种网络资源,JDK也提供了相应的HTTP工具包,但是使用起来不够方便灵活,所以我们可以利用Apache的HttpClient来封装一个具 ...
- Redis连接工具类
Redis连接工具类 导包 测试一下(junit) package com.test; import org.junit.Test; import redis.clients.jedis.Jedis; ...
随机推荐
- php面试专题---mysql数据库分库分表
php面试专题---mysql数据库分库分表 一.总结 一句话总结: 通过数据切分技术将一个大的MySQLServer切分成多个小的MySQLServer,既攻克了写入性能瓶颈问题,同一时候也再一次提 ...
- What is httpcontext
https://docs.microsoft.com/en-us/dotnet/api/system.web.httpcontext?view=netframework-4.8 Encapsulate ...
- p4463 [国家集训队] calc
分析 代码 #include<bits/stdc++.h> using namespace std; ][],Ans; inline int pw(int x,int p){ ; whil ...
- crazyflie四轴飞行器
源地址:http://www.bitcraze.se/2013/02/pre-order-has-started/ Crazyflie是一个开源的纳米四旋翼 来几张靓照 开发平台是开源的,所以原理图和 ...
- ubuntu更换源
1.备份源 cd /etc/apt/ sudo cp sources.list sources.list.bak 2.更换阿里源 sudo vim /etc/apt/sources.list 中 ...
- .NETFramework:System.Collections.Generic.KeyValuePair.cs
ylbtech-.NETFramework:System.Collections.Generic.KeyValuePair.cs 定义可设置或检索的键/值对 1.返回顶部 1. #region 程序集 ...
- PHP-会话技术
B/S 请求响应模式是无状态的.任意的请求间不存在任何的联系,不能将请求状态保持下去. 会话技术可以给每个浏览器分配持久数据,这些数据不会随着一次请求和相应结束而销毁. COOKIE cookie 是 ...
- JavaScript中的十种操作符
① 一元操作符(参与的只有一个变量) 前置递增递减(语句解析到递增/递减时值就被改变了) 后置递增递减(整个语句执行后值再改变) 递增递减也可用于字符串,布尔值,对象等,结果都将是数值: ;v ...
- npm install 安装过程卡住不动
修改 npm 的安装目录下的 npmrc文件 增加一条 registry=http://registry.cnpmjs.org $ npm config set registry http://reg ...
- Git002--安装
Git--安装 本文来自于:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00 ...