posts - 297,  comments - 1618,  trackbacks - 0
                今天跟TiGERTiAN談到HttpURLConnection使用中的一個問題,就是當連接到的那個地址重定向到另一個地址時,怎么樣獲得那個重定向后的地址,弄了一下,找出了方法,結果起先我們兩個都沒想到,嘿嘿,在此記錄一下。
                HttpURLConnection是基于HTTP協議的,其底層通過socket通信實現。
                下面來看一個例子:
          import java.net.HttpURLConnection;
          import java.net.URL;
          import java.io.BufferedReader;
          import java.io.InputStreamReader;

          /**
           * 網頁閱讀器.
           * 
          @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
           * Creation date: 2007-10-9 - 上午11:47:26
           
          */

          public class PageReader {
              
          //連接對象
              private static HttpURLConnection conn;

              
          /**
               * 根據url連接某地址,并返回返回碼.
               * 返回碼說明:
               *         0~200為正常情況,其中200為OK
               *         其余都為錯誤的情況,具體請參見w3
               * 
          @param urlStr 需連接的url字符串
               
          */

              
          private int connect(String urlStr) throws Exception {
                  URL url 
          = new URL(urlStr);
                  conn 
          = (HttpURLConnection) url.openConnection();
                  System.out.println(
          "返回碼: " + conn.getResponseCode());
                  
          //如果定向的地址經過重定向,
                  
          //那么conn.getURL().toString()顯示的是重定向后的地址
                  System.out.println(conn.getURL().toString());
                  
          return conn.getResponseCode();
              }


              
          /**
               * 讀取網頁的內容.
               * 
          @return 返回網頁的內容
               
          */

              
          private String readContents() throws Exception {
                  BufferedReader in 
          = null;
                  StringBuffer sb 
          = new StringBuffer();
                  in 
          = new BufferedReader(new InputStreamReader(conn
                          .getInputStream()));

                  String inputLine;
                  
          while ((inputLine = in.readLine()) != null{
                      sb.append(inputLine);
                      sb.append(
          "\n");
                  }

                  
          return sb.toString();
              }


              
          /**
               * 中斷連接.
               
          */

              
          private void disconnect() {
                  conn.disconnect();
              }

              
              
          /**
               * 測試方法
               * 
          @param args
               * 
          @throws Exception
               
          */

              
          public static void main(String[] args) throws Exception {
                  PageReader reader 
          = new PageReader();
                  String url 
          = "http://hexapixel.com/download.php?file=com.hexapixel.widgets.ribbon.alphatest.src.jar";
                  reader.connect(url);
                  String content 
          = reader.readContents();
                  System.out.println(
          "網頁內容:" + content);
                  reader.disconnect();
              }

          }

                呵呵,http://hexapixel.com/download.php?file=com.hexapixel.widgets.ribbon.alphatest.src.jar
               這個地址會進行重定向,定向為:http://hexapixel.com/files/com.hexapixel.widgets.ribbon.alphatest.src.jar
               TiGERTiAN想要獲得的就是后面那個地址,運行該程序后,大家可以看到,System.out.println(conn.getURL().toString());打出的就是這個地址,可惜TiGERTiAN和我開始都沒想到,看來是要多試試的。大家可以將那個url地址改成http://www.aygfsteel.com/amigoxie試試,這個程序實現的是一個很簡單的網頁閱讀器呵!
          posted on 2007-10-09 12:36 阿蜜果 閱讀(6109) 評論(10)  編輯  收藏 所屬分類: Java


          FeedBack:
          # re: HttpURLConnection使用中遇到的一個問題
          2007-10-09 13:03 | 千里冰封
          呵呵,搞起這個來了,有意思  回復  更多評論
            
          # re: HttpURLConnection使用中遇到的一個問題
          2007-10-09 13:07 | 阿蜜果
          @千里冰封
          是有個朋友用這個時發現的一個問題
          :)  回復  更多評論
            
          # re: HttpURLConnection使用中遇到的一個問題
          2007-10-09 13:17 | dennis
          HttpURLConnection默認是允許重定向,你可以關閉

          conn.setFollowRedirects(false);  回復  更多評論
            
          # re: HttpURLConnection使用中遇到的一個問題
          2007-10-09 18:25 | TiGERTiAN
          嘿嘿。。。多虧Amigo姐姐。。不然要煩死我了。。。  回復  更多評論
            
          # re: HttpURLConnection使用中遇到的一個問題
          2007-10-10 16:28 | 阿蜜果
          @ dennis
          謝謝指點

          @ TiGERTiAN
          同學習嘛  回復  更多評論
            
          # re: HttpURLConnection使用中遇到的一個問題[未登錄]
          2007-10-10 23:10 | xmlspy
          直接使用commons-httpclient-3.1就可以了,比這個方便多了  回復  更多評論
            
          # re: HttpURLConnection使用中遇到的一個問題
          2007-10-11 08:48 | 阿蜜果
          @xmlspy
          恩,commons-httpclient-3.1包還不錯,不過我那個朋友沒有用那個包。它直接用HttpURLConnection時出現的這個問題  回復  更多評論
            
          # re: HttpURLConnection使用中遇到的一個問題[未登錄]
          2007-10-17 20:41 | yoyo
          code review:

          1)conn.getResponseCode(); 重構為: int resultCode = conn.getResponseCode();

          2) StringBuffer sb = new StringBuffer(); 重構為:
          StringBuffer sb = new StringBuffer(conn
          .getInputStream().length);
            回復  更多評論
            
          # re: HttpURLConnection使用中遇到的一個問題[未登錄]
          2007-10-18 08:35 | 阿蜜果
          @yoyo
          thank you very much
          :)  回復  更多評論
            
          # re: HttpURLConnection使用中遇到的一個問題
          2008-09-11 18:08 | hi
          urlconnection 能否將xml字符串發送到php端?我的qq 510823368  回復  更多評論
            
          <2007年10月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

                生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
                我的作品:
                玩轉Axure RP  (2015年12月出版)
                

                Power Designer系統分析與建模實戰  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關注blog

          積分與排名

          • 積分 - 2296332
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阜阳市| 扬中市| 磴口县| 闽侯县| 淮北市| 西充县| 革吉县| 湖口县| 尉氏县| 封开县| 错那县| 托里县| 黄梅县| 博罗县| 凤凰县| 竹溪县| 石台县| 潢川县| 拜泉县| 阿拉善盟| 绥德县| 大新县| 金华市| 绥芬河市| 定襄县| 前郭尔| 邹平县| 林口县| 古丈县| 藁城市| 南召县| 裕民县| 芮城县| 信丰县| 昭通市| 尼勒克县| 贺兰县| 玉田县| 澳门| 根河市| 安宁市|