guangnian0412's BLOG

          Java in my life

          常用鏈接

          統(tǒng)計

          積分與排名

          我關(guān)注的Blog

          最新評論

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

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

          解答:
          ??????? 創(chuàng)建一個HttpClient實例,并調(diào)用以GetMethod對象為參數(shù)的executeMethod方法。然后,響應的內(nèi)容就可以通過一個InputStream,byte[],或者是String來獲得。下面的例子將獲得 http://www.discursive.com /jccook/的內(nèi)容,并且以一個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/的內(nèi)容。如果響應的狀態(tài)碼是HttpStatus.SC_OK(即200),下列響應將被輸出到控制臺:
          <html>
          ?
          <head>
          ??
          <title>JCCook?Example</title>
          ?
          </head>
          ?
          <body>
          ??
          <h1>Hello?World!</h1>
          ?
          </body>
          </html>


          討論:
          ??????? 注意這段代碼中對異常的處理。執(zhí)行一個簡單的HTTP GET需要捕捉兩個異常:HttpException和IOException。如果是發(fā)生HTTP協(xié)議錯誤時,將拋出HttpException異常;如果是發(fā)生有關(guān)網(wǎng)絡的錯誤時,將拋出IOException異常。這一章后面的例子將會忽略對異常的處理。你應該要知道每一次調(diào)用executeMethod()都要用適當?shù)膖ry/catch塊包裹。
          ??????? GetMethod類是HttpMethod接口的一種實現(xiàn)。HttpMethod會被HttpClient所調(diào)用。HttpMethod實現(xiàn)類的生命周期是很簡單的:一個HttpMethod實例被創(chuàng)建,然后被HttpClient調(diào)用;一旦響應被檢測到以后,HttpMethod釋放連接并被回收使用。當HttpMethod調(diào)用了recycle()方法,相當于發(fā)送了一個信號給系統(tǒng)表示這個HttpMethod實例可以再被使用。releaseConnection()方法指示HttpClient釋放掉與這個HttpMethod相關(guān)聯(lián)的連接。無論在使用HttpMethod實例的過程中發(fā)生了什么,都要調(diào)用releaseConnection()來釋放網(wǎng)絡資源。
          ??????? 一旦HttpClient的executeMethod方法被調(diào)用,你可以通過HttpMethod的getStatusCode()方法來獲得響應的狀態(tài)碼。這個方法返回一個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狀態(tài)列表。當服務器返回一個錯誤的HTTP狀態(tài)是,通常還會返回一小段信息。這一小段信息可以通過HttpMethod類的getStatusText()方法獲得。
          ?
          參考:
          ?????? 可以從RFC2616(http://www.zvon.org/tmRFC/RFC2616/Output/index.html)獲得HTTP GET方法的官方定義;
          ?????? 要獲得HTTP 狀態(tài)碼的完整列表,請參見 HttpStatus Javadoc? (http://jakarta.apache.org/commons/ httpclient/apidocs/index.html)。

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

          主站蜘蛛池模板: 诏安县| 普兰县| 光山县| 瑞丽市| 清原| 黎城县| 贵定县| 吐鲁番市| 宁武县| 和龙市| 肥东县| 马鞍山市| 万安县| 浮梁县| 本溪市| 抚顺市| 平安县| 惠水县| 四平市| 湾仔区| 潮州市| 肥西县| 静宁县| 来安县| 昌江| 华容县| 博野县| 东乡县| 黔西县| 玉田县| 清远市| 绥德县| 彰武县| 九江县| 谷城县| 恩平市| 宜宾县| 渭源县| 田林县| 当阳市| 临清市|