HttpComponents组件特性探究(5)

发表于:2012-11-23来源:Csdn作者:fengjia10点击数: 标签:开源框架
} /** * Determine whether the given response indicates a GZIP response. * * The default implementation checks whether the HTTP Content-Encoding * header contains gzip (in any casing). * * @param httpR

  }

  /**

  * Determine whether the given response indicates a GZIP response.

  *

  * The default implementation checks whether the HTTP "Content-Encoding"

  * header contains "gzip" (in any casing).

  *

  * @param httpResponse the resulting HttpResponse to check

  * @return whether the given response indicates a GZIP response

  */

  protected boolean isGzipResponse(HttpResponse httpResponse) {

  Header encodingHeader = httpResponse.getFirstHeader(HTTP_HEADER_CONTENT_ENCODING);

  return (encodingHeader != null && encodingHeader.getValue() != null && encodingHeader

  .getValue().toLowerCase().contains(ENCODING_GZIP));

  }

  /**

  * Shutdown hook that closes the underlying

  * {@link org.apache.http.conn.ClientConnectionManager

  * ClientConnectionManager}'s connection pool, if any.

  */

  public void destroy() {

  getHttpClient().getConnectionManager().shutdown();

  }

  enum HttpMethod {

  GET,

  POST,

  HEAD,

  OPTIONS,

  PUT,

  DELETE,

  TRACE

  }

  }

  下面是久经考验的httpClient 3的二次封装,如下:

  [java] view plaincopyprint?

  /**

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

  }

  return result;

  }

  /**

  * @param uri

  * @param nameValuePairs

  * @return

  */

  public static PostMethod createPostMethod(String uri, NameValuePair[] nameValuePairs) {

  PostMethod method = new PostMethod(uri);

  method.addParameters(nameValuePairs);

  method.getParams().setContentCharset(charsetName);

  return method;

  }

  /**

  * @param uri

  * @param nameValuePairs

  * @return

  */

  public static GetMethod createGetMethod(String uri, NameValuePair[] nameValuePairs) {

  GetMethod method = new GetMethod(uri);

  List list = Lists.newArrayList();

  if (nameValuePairs != null) {

  Collections.addAll(list, nameValuePairs);

  method.setQueryString(list.toArray(new NameValuePair[nameValuePairs.length]));

  }

  method.getParams().setContentCharset(charsetName);

  return method;

  }

  public static HttpClient createHttpClient() {

  //1.

  HttpClient httpClient = new HttpClient(new MultiThreadedHttpConnectionManager());

  //2.

  HttpConnectionManagerParams httpConnectionManagerParams = httpClient

原文转自:http://www.ltesting.net