guangnian0412's BLOG

          Java in my life

          常用鏈接

          統計

          積分與排名

          我關注的Blog

          最新評論

          [HttpClient] 執行HTTP GET方法 (from Jakarta Commons Cookbook 11。3)

          問題:
          ??????? 你需要通過HTTP GET方法來獲取信息。

          解答:
          ??????? 創建一個HttpClient實例,并調用以GetMethod對象為參數的executeMethod方法。然后,響應的內容就可以通過一個InputStream,byte[],或者是String來獲得。下面的例子將獲得 http://www.discursive.com /jccook/的內容,并且以一個String來獲得響應。
          ???????
          ?1?import?org.apache.commons.httpclient.HttpClient;
          ?2?import?org.apache.commons.httpclient.HttpException;
          ?3?import?org.apache.commons.httpclient.HttpMethod;
          ?4?import?org.apache.commons.httpclient.methods.GetMethod;
          ?5?
          ?6?HttpClient?client?=?new?HttpClient(?);
          ?7?String?url?=?"http://www.discursive.com/jccook/";
          ?8?HttpMethod?method?=?new?GetMethod(?url?);
          ?9?
          10?try?{
          11?????client.executeMethod(?method?);
          12?
          13?????if(?method.getStatusCode(?)?==?HttpStatus.SC_OK?)?{
          14?????????String?response?=?method.getResponseBodyAsString(?);
          15?????????System.out.println(?response?);
          16?????}
          17?}?catch(?HttpException?he?)?{
          18?????System.out.println(?"HTTP?Problem:?"?+?he.getMessage(?)?);
          19?}?catch(?IOException?ioe?)?{
          20?????System.out.println(?"IO?Exeception:?"?+?ioe.getMessage(?)?);
          21?}?finally?{
          22?????method.releaseConnection(?);
          23?????method.recycle(?);
          24?}
          ???? 這段代碼用HTTP GET方法獲得了
          http://www.discursive.com/jccook/的內容。如果響應的狀態碼是HttpStatus.SC_OK(即200),下列響應將被輸出到控制臺:
          <html>
          ?
          <head>
          ??
          <title>JCCook?Example</title>
          ?
          </head>
          ?
          <body>
          ??
          <h1>Hello?World!</h1>
          ?
          </body>
          </html>


          討論:
          ??????? 注意這段代碼中對異常的處理。執行一個簡單的HTTP GET需要捕捉兩個異常:HttpException和IOException。如果是發生HTTP協議錯誤時,將拋出HttpException異常;如果是發生有關網絡的錯誤時,將拋出IOException異常。這一章后面的例子將會忽略對異常的處理。你應該要知道每一次調用executeMethod()都要用適當的try/catch塊包裹。
          ??????? GetMethod類是HttpMethod接口的一種實現。HttpMethod會被HttpClient所調用。HttpMethod實現類的生命周期是很簡單的:一個HttpMethod實例被創建,然后被HttpClient調用;一旦響應被檢測到以后,HttpMethod釋放連接并被回收使用。當HttpMethod調用了recycle()方法,相當于發送了一個信號給系統表示這個HttpMethod實例可以再被使用。releaseConnection()方法指示HttpClient釋放掉與這個HttpMethod相關聯的連接。無論在使用HttpMethod實例的過程中發生了什么,都要調用releaseConnection()來釋放網絡資源。
          ??????? 一旦HttpClient的executeMethod方法被調用,你可以通過HttpMethod的getStatusCode()方法來獲得響應的狀態碼。這個方法返回一個int,對應于HttpStatus類的public static final 變量。HttpStatus類還包括下面一些常量:SC_OK(200),SC_NOT_FOUND(404),SC_INTERNAL_SERVER_ERROR(500),SC_MOVED_TEMPORARILY (302),SC_UNAUTHORIZED(401)等等。請參照HttpStatus的Javadoc來獲得所有的HTTP狀態列表。當服務器返回一個錯誤的HTTP狀態是,通常還會返回一小段信息。這一小段信息可以通過HttpMethod類的getStatusText()方法獲得。
          ?
          參考:
          ?????? 可以從RFC2616(http://www.zvon.org/tmRFC/RFC2616/Output/index.html)獲得HTTP GET方法的官方定義;
          ?????? 要獲得HTTP 狀態碼的完整列表,請參見 HttpStatus Javadoc? (http://jakarta.apache.org/commons/ httpclient/apidocs/index.html)。

          posted on 2006-04-04 00:18 guangnian 閱讀(3944) 評論(0)  編輯  收藏 所屬分類: Jakarta Commons

          主站蜘蛛池模板: 丹寨县| 泽普县| 乡宁县| 南澳县| 宜宾市| 惠安县| 凯里市| 凤台县| 梅州市| 德兴市| 耒阳市| 武穴市| 扶绥县| 策勒县| 涞源县| 玉树县| 丹凤县| 金坛市| 正蓝旗| 赞皇县| 红桥区| 英德市| 安化县| 淳安县| 青阳县| 曲阳县| 儋州市| 阿城市| 兰考县| 清涧县| 湖州市| 罗定市| 花莲市| 涡阳县| 措勤县| 焉耆| 徐闻县| 界首市| 迭部县| 卓尼县| 临海市|