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.blogjava.net/amigoxie试试,这个程序实现的是一个很简单的网页阅读器呵!
posted on 2007-10-09 12:36 阿蜜果 阅读(6082) 评论(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月出版)
     

留言簿(262)

随笔分类

随笔档案

文章分类

相册

关注blog

积分与排名

  • 积分 - 2285132
  • 排名 - 3

最新评论

阅读排行榜

评论排行榜