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连接工具类实测可用的更多相关文章

  1. android开发网络连接工具类(一)

    网络连接工具类整理: package com.gzcivil.utils; import java.io.IOException; import java.util.ArrayList; import ...

  2. Sublime3和Chrome配置自动刷新网页【实测可用】

    SublimeText2下的LiveReload在SublimeText3下无法正常使用,本文整理SublimeText3安装LiveReload的方法.win7下实测可用! 安装成功后,就不需要再手 ...

  3. 实测可用的免费STUN服务器!

    实测可用的免费STUN服务器!     以实际ping延迟排序: stun.voipbuster.com 287ms stun.wirlab.net 320ms s1.taraba.net       ...

  4. 数据库连接工具类——包含取得连接和关闭资源 ConnUtil.java

    package com.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepare ...

  5. 数据库连接工具类 数据库连接工具类——仅仅获得连接对象 ConnDB.java

    package com.util; import java.sql.Connection; import java.sql.DriverManager; /** * 数据库连接工具类——仅仅获得连接对 ...

  6. 刚破了潘金莲的身份信息(图片文字识别),win7、win10实测可用(免费下载)

    刚破了潘金莲的身份信息(图片文字识别),win7.win10实测可用 效果如下: 证照,车牌.身份证.名片.营业执照 等图片文字均可识别 电脑版 本人出品 大小1.3MB 下载地址:https://p ...

  7. JDBC实例--通过连接工具类DBUtil +配置文件来获取连接数据库,方便又快捷

    根据前面的连接方法,还有缺点就是,如果人家要换数据库,还得改动源代码,然后还要编译什么的.这样客户修改也不容易. 做法:我们写一个配置文件,把该数据写在配置文件上面,然后通过类来加载改文件,然后读取相 ...

  8. Java开发小技巧(五):HttpClient工具类

    前言 大多数Java应用程序都会通过HTTP协议来调用接口访问各种网络资源,JDK也提供了相应的HTTP工具包,但是使用起来不够方便灵活,所以我们可以利用Apache的HttpClient来封装一个具 ...

  9. Redis连接工具类

    Redis连接工具类 导包 测试一下(junit) package com.test; import org.junit.Test; import redis.clients.jedis.Jedis; ...

随机推荐

  1. day03—JavaScript中DOM的Event事件方法

    转行学开发,代码100天——2018-03-19 1.Event 对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件通常与函数结合使用, ...

  2. iframe的基础应用

    点击top.html里面的按钮,刷新left.html右边的内容 <a href="left.html?id=11111&k=5&b=4"  target=& ...

  3. 安全体系建设-OWASP

    OWASP Checklist Spiders, Robots and Crawlers IG- Search Engine Discovery/Reconnaissance IG- Identify ...

  4. 跨域资源共享(CORS)-漏洞整理

    绕过方法整理 绕过 - 仅对域名校验 #POC #"Access-Control-Allow-Origin: https://xx.co & Access-Control-Allow ...

  5. Show Me the Code

    最近在练习写Python代码,拥有150多道程序员面试题的LeetCode注重算法的实现,锻炼思维,还能在线测试代码的正确性,而Python练习册涉及到了Python实际的应用,锻炼解决问题的能力,托 ...

  6. SAP选择屏幕开发(一)(转)

    原文链接:https://blog.csdn.net/wtxhai/article/details/90632686 用户通过屏幕操作来实现与SAP的数据交互,而SAP的屏幕开发一般分为两种,一种是通 ...

  7. lLinux 下 Stress 压力测试工具

    作者信息 邮箱:sijiayong000@163.com Q Q:601566386 Stress是什么 stress是一个linux下的压力测试工具,专门为那些想要测试自己的系统,完全高负荷和监督这 ...

  8. document.domain vs location.hostname vs location.host

    限制是同源政策的相同规则 document.domain 获取域名 location.hostname    获取域名 location.host   获取域名+端口 document.domain ...

  9. Servlet+AJAX实现的模拟电梯调度

    需求产生: 大三下学期天天在学校的同一栋教学楼上课,每天要等四次电梯,有次等电梯无聊了,就想到电梯的运行逻辑该如何用程序来表达呢? 问题描述: 大学的那栋楼有21层,不过在页面中画21层有点密,所以只 ...

  10. 任务21 :了解ASP.NET Core 依赖注入,看这篇就够了

    DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚.另外再介绍一下.NET  Core的DI实现以及对实例 ...