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

          HttpClient學(xué)習(xí)

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

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

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

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

          HttpClient 基本功能的使用

          GET 方法

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

          1. 創(chuàng)建 HttpClient 的實例

          HttpClient httpClient = new HttpClient();

          2. 創(chuàng)建某種連接方法的實例,在這里是 GetMethod。在 GetMethod 的構(gòu)造函數(shù)中傳入待連接的地址

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

          3. 調(diào)用第一步中創(chuàng)建好的實例的 execute 方法來執(zhí)行第二步中創(chuàng)建好的 method 實例

          int statusCode = httpClient.executeMethod(getMethod);

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

          4. 讀 response

          byte[] responseBody = method.getResponseBody();

          String responseBody = method.getResponseBodyAsString();

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

          method.releaseConnection();

          6. 對得到后的內(nèi)容進(jìn)行處理

          POST方法

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

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

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

          注意:

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

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

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

          (4)301表示永久的移走(Moved Permanently),當(dāng)返回的是301,則表示請求的資源已經(jīng)被移到一個固定的新地方,任何向該地址發(fā)起請求都會被轉(zhuǎn)到新的地址上。302表示暫時的轉(zhuǎn)向,比如在服務(wù)器端的servlet程序調(diào)用了sendRedirect方法,則在客戶端就會得到一個302的代碼,這時服務(wù)器返回的頭信息中l(wèi)ocation的值就是sendRedirect轉(zhuǎn)向的目標(biāo)地址。

          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) {

          // 從頭中取出轉(zhuǎn)向的地址

          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;

          }


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 遵化市| 无棣县| 平利县| 桐柏县| 乌海市| 侯马市| 时尚| 道孚县| 浦县| 鄂托克旗| 桦甸市| 正安县| 托里县| 武隆县| 襄城县| 酒泉市| 额尔古纳市| 佛坪县| 建阳市| 尤溪县| 阿合奇县| 大城县| 阿巴嘎旗| 汉沽区| 金溪县| 监利县| 合山市| 盐边县| 六安市| 仙游县| 太康县| 诸暨市| 稷山县| 大同市| 吉木乃县| 竹山县| 理塘县| 滦南县| 井冈山市| 宁南县| 启东市|