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.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; import com.suning.ppms.util.exception.ExceptionTraceUtil; import com.suning.ppms.util.regex.RegexUtil; /** * 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() { //信任所有 @Override 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 RegexUtil.isHttps(url) ? execute(request,httpsClient): 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 postBody(String url, String body, Map<String, String> headers) { HttpPost request = new HttpPost(url); try { wrapHeader(request, headers);// 设置请求头 wrapStringEntity(request, body);// 设置body return RegexUtil.isHttps(url) ? execute(request,httpsClient): 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 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); } 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) { ExceptionTraceUtil.trace("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)); } } }
相关推荐
HttpAsyncClient连接池的使用,项目中频繁发送http请求,同步http阻塞主线程,影响性能,使用 HttpAsyncClient可使性能提高,这里配合连接池使用,效果更好,同时还附带同步httpClient的连接池使用
传统的HttpURLConnection并不支持连接池,如果要实现连接池的机制,还需要自己来管理连接对象。对于网络请求这种底层相对复杂的操作,个人以为如果有可用的其他方案,也没有必要自己去管理连接对象。 除了...
连接池连接池连接池连接池连接池
连接池案例
Tomcat6配置连接池很全面的东东
对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库连接池技术。某一应用最大可用数据库连接数的限制,避免某一应用独占所有数据库资源。 在较为完备的数据库连接池实现中,可根据...
C# 数据库连接池 C# 数据库连接池 C# 数据库连接池 C# 数据库连接池
实现httpClient连接池,同时支持http和https请求,代码可直接导入IDE运行,无冗余代码
http连接池.html
封装抽取了一个kafka生产者的连接池,能很好的用池的方式对kafka生产者连接点进行有效的管理
一个简单的支持多个db的redis连接池一个简单的支持多个db的redis连接池一个简单的支持多个db的redis连接池一个简单的支持多个db的redis连接池一个简单的支持多个db的redis连接池一个简单的支持多个db的redis连接池一...
基于阿里的druid连接池,自己把对国产数据库达梦的支持加上去了,支持了wall方式,暂时没发现什么问题 :) 使用方式同原版
代码中包含okhhtp中连接池的设计,包含连接对象的添加,连接对象何时被移除。
连接池 连接池 连接池 连接池
连接池 连接池 java JSP连接池 连接池 java JSP连接池 连接池 java JSP连接池 连接池 java JSP
* 支持多线程,保证获取到的连接一定是没有被其他线程正在使用 * 按需创建连接,可以创建多个连接,可以控制连接的数量 * 连接被复用,不是每次都重新创建一个新的连接(连接的创建是一个很消耗资源的过程) * ...
Druid为监控而生的数据库连接池,它是阿里巴巴...Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能.它可以替换DBCP和C3P0连接池。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池
JAVA+ACCESS连接池JAVA+ACCESS连接池JAVA+ACCESS连接池JAVA+ACCESS连接池JAVA+ACCESS连接池JAVA+ACCESS连接池JAVA+ACCESS连接池
基于tp5的swoole支持,对th5的connection进行改造,使用Swoole\Coroutine\MySQL重写了基于swoole的PDO接口,实现了mysql的数据库连接池,本地测试可用。使用时,替换thinkphp/library/think/db/Connection.php,并...
Tomcat连接池配置,包你学会tomcat连接池的使用