HttpClient4.0雜談

****************************HttpClient4.0用法*****************************
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");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章