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;
    }

}
相關文章
相關標籤/搜索