1、初始化HttpParams,設置組件參數
//HttpParams接口代表一個不可改變值的集合,定義一個組件運行時行爲。代表一個對象集合,該集合是一個鍵到值的映射。
//HttpParams作用是定義其他組件的行爲,一般每個複雜的組件都有它自己的HttpParams對象。
HttpParams params = new BasicHttpParams();
// HTTP 協議的版本,1.1/1.0/0.9
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setUserAgent(params, "HttpComponents/1.1");
HttpProtocolParams.setUseExpectContinue(params, true);
ConnManagerParams.setMaxTotalConnections(params, maxconnections); // 設置最大連接數maxconnections);
ConnManagerParams.setTimeout(params, timeout*1000); // 設置超時時間 timeout 秒
2、初始化SchemeRegistry,設置訪問協議
//Scheme類表示一個協議方案,例如"http"或者"https"和包含許多的協議屬性,
//例如缺省的端口和socket工廠常用於爲指定的協議創建java.net.Socket實例,SchemeRegistry類被用來維護一個Schemes的集合
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", PlainSocketFactory
.getSocketFactory(), 80));
schemeRegistry.register(new Scheme("https", SSLSocketFactory
.getSocketFactory(), 443));
3、初始化httpclient會話連接管理器
//HTTP連接是複雜、有狀態的,非線程安全的對象需要適當的管理正確的功能。HTTP連接每次僅被一個執行的線程使用,
//HttpClient利用一個特殊的實體管理訪問HTTP連接,稱爲HTTP連接管理器,由ClientConnectionManager接口表示。
//HTTP連接管理器的充當一個新的HTTP連接工廠,管理持續的連接和同步的訪問持續的連接,確保每次只有一個線程能訪問連接。
ClientConnectionManager connectionManager = new ThreadSafeClientConnManager(params,
schemeRegistry);
4、初始化httpClient並加入會話連接管理器,此步很重要,對於使用httpclient多線程併發訪問服務系統很有用
//HttpClient最重要的功能是執行HTTP方法。執行一個HTTP方法涉及一個或多個HTTP請求/ HTTP響應信息交流,
//通常是由HttpClient內部處理。用戶提供一個請求對象,HttpClient發送請求到目標服務器,
//希望服務器返回一個相應的響應對象,或者拋出一個異常(如果執行失敗)。
HttpClient httpClient = new DefaultHttpClient(connectionManager, params);
5、定義HttpHost
// HttpHost代表訪問的主機
String sHost = "www.hao123.com"; //訪問服務器的主網址
httpHost = new HttpHost(sHost);
6、執行get請求
6.1 先定義方法getResponseContent,用來根據指定系統編碼獲取響應主體內容,很有用的方法
public String getResponseContent(HttpEntity responseEntity)
throws Exception {
byte[] bytes = EntityUtils.toByteArray(responseEntity);
String sCharSet="GB2312"; //這裏可以定義你指定的編碼,中文網站編碼一般爲GB2312
return new String(bytes, sCharSet);
}
6.2 執行get請求,獲取響應的html內容
String sURL="/abc/index.html"; //定義你需要訪問的網址後面的路徑
HttpGet httpGet = new HttpGet(sURL);//定義get請求
HttpResponse httpResponse = httpClient.execute(httpHost, httpGet); //使用httpclient執行get請求並返回響應 訪問的網址爲 www.hao123.com/abc/index.html
// 2 獲取響應
HttpEntity responseEntity = httpResponse.getEntity();
String sReturnHtml = getResponseContent(responseEntity);//得到get請求返回的html頁面,然後就做你想做的東西了
//比如解析html頁面,得到你想得到的東西
httpGet.abort();//釋放連接資源,很重要,不能缺少
7、執行post請求
7.1初始化httppost
String sURL="/abc/index.html";
HttpPost httpPost = new HttpPost(sURL);
7.2設置Post請求參數NameValuePair
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("name", "testname"));
nvps.add(new BasicNameValuePair("password", "testpassword"));
7.3把請求參數按指定編碼設置到httppost中,設置httppost請求頭內容,可解決中文亂碼問題,非常重要
String sCharSet="GB2312";
httpPost.setEntity(new UrlEncodedFormEntity(nvps, sCharSet));
// ---begin解決中文亂碼問題
httpPost.addHeader("Content-Type","application/x-www-form-urlencoded");
httpPost.addHeader("Accept-Language", "zh-cn");