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

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章