public class HttpClientUtil {
private static Logger logger = LoggerFactory.getLogger(HttpClientUtil.class);
private static PoolingHttpClientConnectionManager connectionManager = null;
private static HttpClientBuilder clientBuilder = null;
private static RequestConfig requestConfig = null;
public static int REQUEST_TIMEOUT = 300;
public static int CONNECT_TIMEOUT = 300;
public static int SOCKET_TIMEOUT = 300;
public static int MAX_CONNECTION = 100;
public static int MAX_HOST_CONNECTION = 30;
public static String UTF_8 = "UTF-8";
public static int READER_SIZE = 8192;
static {
requestConfig = RequestConfig.custom().setSocketTimeout(SOCKET_TIMEOUT).setConnectTimeout(CONNECT_TIMEOUT).setConnectionRequestTimeout(REQUEST_TIMEOUT).build();
connectionManager = new PoolingHttpClientConnectionManager();
connectionManager.setMaxTotal(MAX_CONNECTION);
connectionManager.setDefaultMaxPerRoute(MAX_HOST_CONNECTION);
clientBuilder = HttpClients.custom().setConnectionManagerShared(true);
clientBuilder.setConnectionManager(connectionManager);
}
public static String requestByGetMethod(String s) {
CloseableHttpClient httpClient = clientBuilder.build();
StringBuilder entityStringBuilder = null;
try {
HttpGet get = new HttpGet(s);
get.setConfig(requestConfig);
CloseableHttpResponse httpResponse = httpClient.execute(get);
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
try {
HttpEntity entity = httpResponse.getEntity();
entityStringBuilder = new StringBuilder();
if (null != entity) {
inputStreamReader = new InputStreamReader(httpResponse.getEntity().getContent(), UTF_8);
bufferedReader = new BufferedReader(inputStreamReader, READER_SIZE);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
entityStringBuilder.append(line + "\n");
}
}
}
catch (Exception e) {
logger.error("Request {} Exception {}",s,e);
}
finally {
try {
if (inputStreamReader != null) {
inputStreamReader.close();
}
}
catch (Exception e) {
logger.error("inputStreamReader close error Request {} Exception {}",s,e);
}
try {
if (bufferedReader != null) {
bufferedReader.close();
}
}
catch (Exception e) {
logger.error("bufferedReader close error Request {} Exception {}",s,e);
}
try {
if (httpResponse != null) {
httpResponse.close();
}
}
catch (Exception e) {
logger.error("httpResponse close error Request {} Exception {}",s,e);
}
}
}
catch (Exception e) {
logger.error("Request {} Exception {}",s,e);
}
finally {
try {
if (httpClient != null) {
httpClient.close();
}
}
catch (Exception e) {
logger.error("httpClient close error Request {} Exception {}",s,e);
}
}
return entityStringBuilder.toString();
}
}
setConnectionManagerShared()是4.4的新方法,如果不调用该方法的话,connectionManager是不能被共享的,只能执行一次