.getHttpConnectionManager().getParams();
httpConnectionManagerParams.setConnectionTimeout(connectionTimeout);
httpConnectionManagerParams.setTcpNoDelay(true);//Nagle's algorithm
httpConnectionManagerParams.setSoTimeout(timeOut);
httpConnectionManagerParams.setDefaultMaxConnectionsPerHost(maxHostConnections);
httpConnectionManagerParams.setMaxTotalConnections(maxTotalConnections);
//3.
HttpClientParams httpClientParam = httpClient.getParams();
//httpClientParam.setConnectionManagerTimeout(connectionTimeout);//暂且不关注这个超时设置,后面根据性能酌情考虑
httpClientParam.setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(retryCount, false));
httpClientParam.setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
return httpClient;
}
public static JSONObject doGet(String url, NameValuePair[] params) {
return executeMethod(createHttpClient(), createGetMethod(url, params));
}
public static JSONObject doPost(String url, NameValuePair[] params) {
return executeMethod(createHttpClient(), createPostMethod(url, params));
}
protected HttpClientUtils() {
}
public void setTimeOut(int timeOut) {
HttpClientUtils.timeOut = timeOut;
}
public static int getTimeOut() {
return timeOut;
}
public static int getRetryCount() {
return retryCount;
}
public void setRetryCount(int retryCount) {
HttpClientUtils.retryCount = retryCount;
}
public static int getConnectionTimeout() {
return connectionTimeout;
}
public void setConnectionTimeout(int connectionTimeout) {
HttpClientUtils.connectionTimeout = connectionTimeout;
}
public static int getMaxHostConnections() {
return maxHostConnections;
}
public void setMaxHostConnections(int maxHostConnections) {
HttpClientUtils.maxHostConnections = maxHostConnections;
}
public static int getMaxTotalConnections() {
return maxTotalConnections;
}
public void setMaxTotalConnections(int maxTotalConnections) {
HttpClientUtils.maxTotalConnections = maxTotalConnections;
}
public static String getCharsetName() {
return charsetName;
}
public void setCharsetName(String charsetName) {
HttpClientUtils.charsetName = charsetName;
}
}
/**
* @author von gosling 2011-12-12
*/
public class HttpClientUtils {
private static final Logger log = LoggerFactory
.getLogger(HttpClientUtils.class);
private static int timeOut = 100;
private static int retryCount = 1;
private static int connectionTimeout = 100;
private static int maxHostConnections = 32; //根据apache work MPM设置此值
private static int maxTotalConnections = 512; //同上
private static String charsetName = "UTF-8";
public static JSONObject executeMethod(HttpClient httpClient, HttpMethod method) {
JSONObject result = new JSONObject();
StopWatch watch = new StopWatch();
int status = -1;
try {
log.info("Execute method({}) begin...", method.getURI());
watch.start();
status = httpClient.executeMethod(method);
watch.stop();
if (status == HttpStatus.SC_OK) {
InputStream inputStream = method.getResponseBodyAsStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOUtils.copy(inputStream, baos);
String response = new String(baos.toByteArray(), charsetName);
log.info("Response is:{}", response);
result = JSONObject.parseObject(response);
} else {
log.error("Http request failure! status is {}", status);
}
} catch (SocketTimeoutException e) {
log.error("Request time out!");//只关注请求超时,对于其它两类超时,使用通用异常捕获
} catch (Exception e) {
log.error("Error occur!", e);
} finally {
method.releaseConnection();
log.info("Method {},statusCode {},consuming {} ms", new Object[] { method.getName(),
status, watch.getTime() });
}