HttpClientUtil

package com.chexun.core.utils;

import java.io.UnsupportedEncodingException;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.net.ssl.SSLContext;

import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
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.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
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.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * http交互工具类
 */
public class HttpClientUtil {

	protected static final Logger logger = LoggerFactory.getLogger(HttpClientUtil.class);

	public static final String METHOD_POST = "POST";
	public static final String METHOD_GET = "GET";
	public static final String DEFAULT_CHARSET = "utf-8";
	public static final String DEFAULT_CONTENT_TYPE = "application/json;charset=UTF-8";
	public static final int DEFAULT_CONNECT_TIMEOUT = 5000;
	public static final int DEFAULT_READ_TIMEOUT = 5000;
	public static final int DEFAULT_CONNECT_REQUEST_TIMEOUT = 5000;

	private static final int MAX_TOTAL = 64;
	private static final int MAX_PER_ROUTE = 32;
	private static final RequestConfig requestConfig;
	private static final PoolingHttpClientConnectionManager connectionManager;
	private static final HttpClientBuilder httpBuilder;
	private static final CloseableHttpClient httpClient;
	private static final CloseableHttpClient httpsClient;
	private static SSLContext sslContext = null;

	static {

		try {
			sslContext = new SSLContextBuilder().loadTrustMaterial(null,
					new TrustStrategy() {
						// 信任所有
						public boolean isTrusted(X509Certificate[] xcs,
								String string) {
							return true;
						}
					}).build();
		} catch (KeyStoreException ex) {
			logger.error(ex.getMessage(), ex);
		} catch (NoSuchAlgorithmException ex) {
			logger.error(ex.getMessage(), ex);
		} catch (KeyManagementException ex) {
			logger.error(ex.getMessage(), ex);
		}
	}

	static {
		requestConfig = RequestConfig.custom()
				.setSocketTimeout(DEFAULT_READ_TIMEOUT)
				.setConnectTimeout(DEFAULT_CONNECT_TIMEOUT)
				.setConnectionRequestTimeout(DEFAULT_CONNECT_REQUEST_TIMEOUT)
				.build();
		Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder
				.<ConnectionSocketFactory> create()
				.register("http", new PlainConnectionSocketFactory())
				.register("https",new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)).build();
		connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
		connectionManager.setMaxTotal(MAX_TOTAL);
		connectionManager.setDefaultMaxPerRoute(MAX_PER_ROUTE);
		httpBuilder = HttpClientBuilder.create();
		httpBuilder.setDefaultRequestConfig(requestConfig);
		httpBuilder.setConnectionManager(connectionManager);
		httpClient = httpBuilder.build();
		httpsClient = httpBuilder.build();
	}

	private HttpClientUtil() {}

	public static String get(String url, Map<String, String> headers) {
		HttpGet request = new HttpGet(url);
		try {
			wrapHeader(request, headers);// 设置请求头
			return execute(request, httpClient);
		} catch (Exception e) {
			// ExceptionTraceUtil.trace("409", "01", "101", e, url, headers);
			logger.error(e.getMessage(), e);
		} finally {
			request.releaseConnection();
		}
		return null;
	}

	public static String getSSL(String url, Map<String, String> headers) {
		HttpGet request = new HttpGet(url);
		try {
			wrapHeader(request, headers);// 设置请求头
			return execute(request, httpsClient);
		} catch (Exception e) {
			// ExceptionTraceUtil.trace("409", "01", "101", e, url, headers);
			logger.error(e.getMessage(), e);
		} finally {
			request.releaseConnection();
		}
		return null;
	}

	public static String postBody(String url, String body,
			Map<String, String> headers) {
		HttpPost request = new HttpPost(url);
		try {
			wrapHeader(request, headers);// 设置请求头
			wrapStringEntity(request, body);// 设置body
			return execute(request, httpClient);
		} catch (Exception e) {
			// ExceptionTraceUtil.trace("409", "01", "102", e, url, body,
			// headers);
			logger.error(e.getMessage(), e);
		} finally {
			request.releaseConnection();
		}
		return null;
	}

	public static String postBodySSL(String url, String body,
			Map<String, String> headers) {
		HttpPost request = new HttpPost(url);
		try {
			wrapHeader(request, headers);// 设置请求头
			wrapStringEntity(request, body);// 设置body
			return execute(request, httpsClient);
		} catch (Exception e) {
			// ExceptionTraceUtil.trace("409", "01", "102", e, url, body,
			// headers);
			logger.error(e.getMessage(), e);
		} finally {
			request.releaseConnection();
		}
		return null;
	}

	public static String postForm(String url, Map<String, String> params,
			Map<String, String> headers) {
		HttpPost request = new HttpPost(url);
		try {
			wrapHeader(request, headers);// 设置请求头
			wrapFormEntity(request, params);
			// return RegexUtil.isHttps(url) ? execute(request, httpsClient)
			// : execute(request, httpClient);

			return execute(request, httpClient);
		} catch (Exception e) {
			// ExceptionTraceUtil.trace("409", "01", "103", e, url, params,
			// headers);
			logger.error(e.getMessage(), e);
		} finally {
			request.releaseConnection();
		}
		return null;
	}

	public static String postFormSSL(String url, Map<String, String> params,
			Map<String, String> headers) {
		HttpPost request = new HttpPost(url);
		try {
			wrapHeader(request, headers);// 设置请求头
			wrapFormEntity(request, params);
			// return RegexUtil.isHttps(url) ? execute(request, httpsClient)
			// : execute(request, httpClient);
			return execute(request, httpsClient);
		} catch (Exception e) {
			// ExceptionTraceUtil.trace("409", "01", "103", e, url, params,
			// headers);
			logger.error(e.getMessage(), e);
		} finally {
			request.releaseConnection();
		}
		return null;
	}

	private static String execute(HttpRequestBase request,
			CloseableHttpClient httpClient) {
		String respJson = null;
		try {
			CloseableHttpResponse response = httpClient.execute(request);
			if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				HttpEntity httpEntity = response.getEntity();
				respJson = EntityUtils.toString(httpEntity, DEFAULT_CHARSET);
				EntityUtils.consume(httpEntity);
			}
		} catch (Exception e) {
			e.printStackTrace();
			// ("409", "01", "104", e, request);
			logger.error(e.getMessage(), e);
		}
		return respJson;
	}

	private static void wrapHeader(HttpRequestBase request,
			Map<String, String> headers) {
		// 设置请求头
		if (null != headers) {
			for (Map.Entry<String, String> entry : headers.entrySet()) {
				request.addHeader(entry.getKey(), entry.getValue());
			}
		}
	}

	private static void wrapStringEntity(HttpPost request, String body) {
		// 设置body
		if (body != null) {
			StringEntity entity = new StringEntity(body, DEFAULT_CHARSET);// 解决中文乱码问题
			entity.setContentEncoding(DEFAULT_CHARSET);
			request.setEntity(entity);
		}
	}

	private static void wrapFormEntity(HttpPost request,
			Map<String, String> params) throws UnsupportedEncodingException {
		if (params != null) {
			List<NameValuePair> nvps = new ArrayList();
			for (Map.Entry<String, String> entry : params.entrySet()) {
				nvps.add(new BasicNameValuePair(entry.getKey(), entry
						.getValue()));
			}
			request.setEntity(new UrlEncodedFormEntity(nvps, DEFAULT_CHARSET));
		}
	}
	
	public static void main(String[] args) {
		String resp = HttpClientUtil.getSSL("https://localhost:8443/SSL0/ssl", new HashMap<String, String>());
		System.out.println(resp);
	}

}
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" sslProtocol="TLS" 
               maxThreads="150" SSLEnabled="true" keystoreFile="D:/keys/ssl3/serverKeystore.jks" keystorePass="12345678">
		<!--
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
		-->
    </Connector>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值