.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() });

  }