posts - 2, comments - 1, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          HttpClient學習

          Posted on 2008-02-01 14:37 wary 閱讀(449) 評論(0)  編輯  收藏

          參考http://www.ibm.com/developerworks/cn/opensource/os-httpclient/,以備個人學習所用

          HttpClient 是 Apache Jakarta Common 下的子項目,可以用來提供高效的、最新的、功能豐富的支持 HTTP 協議的客戶端編程工具包,并且它支持 HTTP 協議最新的版本和建議。
          HttpClient 提供的主要的功能:

          • 實現了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
          • 支持自動轉向
          • 支持 HTTPS 協議
          • 支持代理服務器等

          HttpClient 基本功能的使用

          GET 方法

          使用 HttpClient 需要以下 6 個步驟:

          1. 建 HttpClient 的實例

          HttpClient httpClient = new HttpClient();

          2. 創建某種連接方法的實例,在這里是 GetMethod。在 GetMethod 的構造函數中傳入待連接的地址

          GetMethod getMethod = new GetMethod("http://www.tom.com/");

          3. 調用第一步中創建好的實例的 execute 方法來執行第二步中創建好的 method 實例

          int statusCode = httpClient.executeMethod(getMethod);

          if (statusCode ==HttpStatus.SC_OK) 則說明成功了

          4. 讀 response

          byte[] responseBody = method.getResponseBody();

          String responseBody = method.getResponseBodyAsString();

          5. 釋放連接。無論執行方法是否成功,都必須釋放連接

          method.releaseConnection();

          6. 對得到后的內容進行處理

          POST方法

          根據RFC2616,對POST的解釋如下:POST方法用來向目的服務器發出請求,要求它接受被附在請求后的實體,并把它當作請求隊列(Request-Line)中請求URI所指定資源的附加新子項。POST被設計成用統一的方法實現下列功能:

          • 對現有資源的注釋(Annotation of existing resources)
          • 向電子公告欄、新聞組,郵件列表或類似討論組發送消息
          • 提交數據塊,如將表單的結果提交給數據處理過程
          • 通過附加操作來擴展數據庫

          調用HttpClient中的PostMethod與GetMethod類似,除了設置PostMethod的實例與GetMethod有些不同之外,剩下的步驟都差不多。

          注意:

          (1)表單中的域用類NameValuePair來表示,該類的構造函數第一個參數是域名,第二參數是該域的值

          (2)將表單所有的值設置到PostMethod中用方法setRequestBody

          (3)HttpClient對于要求接受后繼服務的請求,比如POST和PUT,不支持自動轉發,因此需要自己對頁面轉向做處理

          (4)301表示永久的移走(Moved Permanently),當返回的是301,則表示請求的資源已經被移到一個固定的新地方,任何向該地址發起請求都會被轉到新的地址上。302表示暫時的轉向,比如在服務器端的servlet程序調用了sendRedirect方法,則在客戶端就會得到一個302的代碼,這時服務器返回的頭信息中location的值就是sendRedirect轉向的目標地址。

          String url = "http://www.abc.com";

          PostMethod postMethod = new PostMethod(url);              

          NameValuePair[] data = { new NameValuePair("id", "youUserName"),

          new NameValuePair("passwd", "yourPwd") };

          postMethod.setRequestBody(data);

          int statusCode = httpClient.executeMethod(postMethod);

          // 301或者302

          if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY ||

          statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {

          // 從頭中取出轉向的地址

          Header locationHeader = postMethod.getResponseHeader("location");

          String location = null;

          if (locationHeader != null) {

          location = locationHeader.getValue();

          System.out.println("The page was redirected to:" + location);

          } else {

          System.err.println("Location field value is null.");

          }

          return;

          }


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 肥乡县| 仙桃市| 北海市| 青铜峡市| 双柏县| 衢州市| 南丰县| 江阴市| 西畴县| 鲜城| 永丰县| 南部县| 迁西县| 林甸县| 祁门县| 沛县| 涟水县| 望都县| 灌云县| 镇江市| 观塘区| 吉木萨尔县| 阳泉市| 庆阳市| 衡东县| 扎赉特旗| 通州区| 三门峡市| 珲春市| 崇文区| 吉安市| 丰镇市| 都江堰市| 宣化县| 乐陵市| 安宁市| 咸阳市| 隆化县| 娱乐| 调兵山市| 德保县|