import org.apache.commons.httpclient.HttpStatus;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
/ **
* HTTP connection pool control
* /
public class HttpClientPool {
Private Client static volatile CloseableHttpClient = null;
Private = null static PoolingHttpClientConnectionManager cm & lt;
Private static RequestConfig config = null;
// ----------------------- --- configure the connection properties --------------------------
private static int requestTimeout = 120000; // time acquisition request from the pool
private static int connectTimeout = 120000; // time to connect to the server
private static int socketTimeout = 120000; // time of reading information
// --------------- connection pool configuration properties ---- ----------------------
Private maxTotal static int = 400; // maximum number of connections
private static int defaultMaxPerRoute = 200; // default single address does not exceed the number of connections The maximum connection data
//-----------------------------------------------------
static {
config = RequestConfig.custom()
.setConnectionRequestTimeout(requestTimeOut)
.setConnectTimeout(connectTimeout)
.setSocketTimeout(socketTimeout).build();
cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(maxTotal);
cm.setDefaultMaxPerRoute(defaultMaxPerRoute);
RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();
client = HttpClients.custom()
.setRetryHandler(DefaultHttpRequestRetryHandler.INSTANCE)
.setDefaultRequestConfig(config)
.setConnectionManager(cm)
.setDefaultRequestConfig(globalConfig)
.build();
}
public static CloseableHttpClient getHttpClient() {
if (null == client) {
synchronized (AmarHttpClientPool.class) {
if (null == client){
RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();
client = HttpClients.custom()
.setRetryHandler(DefaultHttpRequestRetryHandler.INSTANCE)
.setDefaultRequestConfig(config)
.setConnectionManager(cm)
.setDefaultRequestConfig(globalConfig)
.build();
}
}
}
return client;
} @SuppressWarnings("unused")
public static String execute() throws Exception {
String url = "http://...";
CloseableHttpClient httpClient = HttpClients.createDefault();//HttpClientPool.getHttpClient();
HttpPost httpPost = new HttpPost(url);
RequestConfig config = RequestConfig.custom().setConnectTimeout(5000).setSocketTimeout(3000).setConnectionRequestTimeout(5000).build();
httpPost.setConfig(config);
httpPost.setEntity(new StringEntity("请求参数....","utf-8"));
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
int status = response.getStatusLine().getStatusCode();
IF (Status = HttpStatus.SC_OK!) {
the throw new new Exception ( "service call:" + url + "failed return status code:" + Status);
}
String Result = EntityUtils.toString (response.getEntity ());
the System .out.println ( "original message:" Result +);
String startStr = "<NSl: OUT>";
int startIndex = result.indexOf (startStr);
int endIndex = result.indexOf ( "</ NSl: OUT> ");
Assert startIndex> = 0 && endIndex> = 0:" newspaper style flag <ns1: out> or </ ns1: out> does not exist, the original message: "Result +;
EntityUtils.consume (response.getEntity ( ));
return result.substring (startIndex + startStr.length (), endIndex);
}
}
/**
* Call Case
* /
public static void main (String [] args) {
CloseableHttpClient httpclient = HttpClientPool.getHttpClient();
HttpPost httpPost = new HttpPost("url");
httpPost.setHeader("Content-Type", "application/json;charset=utf-8");
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("X-Forwarded-For","ip");
httpPost.setEntity(new StringEntity(requestParams.toString(), "UTF-8"));
try (CloseableHttpResponse response = httpclient.execute(httpPost)) {
int status = response.getStatusLine().getStatusCode();
if (status != HttpStatus.SC_OK) {
throw new Exception("调用服务:" + hubserviceUrl + "失败,返回状态码为:" + status);
}
HttpEntity entity = response.getEntity();
if (entity != null) {
resp = EntityUtils.toString(entity, "UTF-8");
}
EntityUtils.consume(response.getEntity());
}
}
}