HttpClientUtil

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.apache.commons.httpclient.params.HttpConnectionManagerParams;

public class HttpClientUtil {
    private HttpClientUtil() {
    }

    private static HttpClient httpClient = null;

    //静态工厂方法   
    public static HttpClient getInstanceHttpClient() {
        if (httpClient == null) {
            MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
            // 建立 HttpClient 的多线程实例  
            //在建立httpclient对象的时候,默认使用simpleHttpConnectionManager做为链接管理,而它不适合多线程环境。故修正方法是:本身建立httpclient对象,并指定适合多线程环境的链接管理器。
//            httpClient = new HttpClient(connectionManager);

//            /*
            HttpConnectionManagerParams params = new HttpConnectionManagerParams();
            params.setConnectionTimeout(1000);
//            params.setSoTimeout(2000);
            // 最大链接数
            params.setMaxTotalConnections(1);
            params.setDefaultMaxConnectionsPerHost(1);
            params.setStaleCheckingEnabled(true);

            connectionManager.setParams(params);
            HttpClientParams httpClientParams = new HttpClientParams();
            // 设置httpClient的链接超时,对链接管理器设置的链接超时是无用的
            httpClientParams.setConnectionManagerTimeout(1000); //等价于4.2.3中的CONN_MANAGER_TIMEOUT
            httpClient = new HttpClient(connectionManager);
            httpClient.setParams(httpClientParams);
            //另外设置http client的重试次数,默认是3次;当前是禁用掉(若是项目量不到,这个默认便可)
//            httpClientParams.setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(0, false));
//            */

        }
        return httpClient;
    }

}
相关文章
相关标签/搜索