`
kakaluyi
  • 浏览: 445066 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

HttpURLConnection中获得重定向的地址 (转)

阅读更多

HttpURLConnection使用中的一个问题,就是当连接到的那个地址重定向到另一个地址时,怎么样获得那个重定向后的地址,弄了一下,找出了方法,结果起先我们两个都没想到,嘿嘿,在此记录一下。

  HttpURLConnection是基于HTTP协议的,其底层通过socket通信实现。下面来看一个例子:

  今天跟TiGERTiAN谈到HttpURLConnection使用中的一个问题,就是当连接到的那个地址重定向到另一个地址时,怎么样获得那个重定向后的地址,弄了一下,找出了方法,结果起先我们两个都没想到,嘿嘿,在此记录一下。

  HttpURLConnection是基于HTTP协议的,其底层通过socket通信实现。

下面来看一个例子:
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.io.BufferedReader; 
import java.io.InputStreamReader; 

/** *//**
* 网页阅读器.
* @author AmigoXie
* 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试试,这个程序实现的是一个很简单的网页阅读器呵!

分享到:
评论
2 楼 kakaluyi 2009-03-16  
晕http://www.cdut.edu.cn/cdut/和
http://www.cdut.edu.cn/cdut/index.jsp不是一模一样吗
再说我直接在浏览器输入http://www.cdut.edu.cn 直接重定向到http://www.cdut.edu.cn/cdut/,而不是http://www.cdut.edu.cn/cdut/index.jsp呀,
1 楼 WindMill 2009-03-14  
这有问题啊?conn.getURL().toString());...http://www.cdut.edu.cn重定向到http://www.cdut.edu.cn/cdut/,然后这个地址又重定向到http://www.cdut.edu.cn/cdut/index.jsp,这不能最后重定向到最后这个链接。请教怎么解决啊?

相关推荐

    使用HttpURLConnection

    在Java编程中,`HttpURLConnection`是用于处理HTTP请求的核心类,它位于`java.net`包下,是标准的Java API。这个类提供了一个接口,让我们能够与HTTP服务器进行交互,执行GET、POST等HTTP方法。`HttpURLConnection`...

    Java 获取网络302重定向URL的方法

    在实际应用中,我们需要获取到重定向后的URL以便正确处理请求。本文将详细介绍两种在Java中获取302重定向URL的方法。 ### 方法一:使用`HttpURLConnection` `HttpURLConnection`是Java内置的HTTP客户端,它提供了...

    java HttpURLConnection 使用示例

    总结,`HttpURLConnection`是Java中处理HTTP请求的首选工具,其灵活性和易用性使得在各种网络编程场景中都得到了广泛应用。通过理解并熟练运用上述知识,开发者能够轻松地进行HTTP通信,同时解决可能出现的编码问题...

    android使用HTTPURLconnection/get方法访问HTTP

    2. **打开连接**:然后,通过调用`openConnection()`方法,你可以得到一个`HttpURLConnection`实例: ```java HttpURLConnection connection = (HttpURLConnection) url.openConnection(); ``` 3. **设置请求...

    Android 中HttpURLConnection与HttpClient使用的简单实例

    但随着Android版本的更新,这些问题得到了解决,现在HttpURLConnection成为了首选。 在实际应用中,你可能还需要处理更多细节,例如添加请求头、处理超时、处理重定向、错误处理等。此外,对于现代Android应用,...

    【Java】java.net.HttpURLConnection的使用.doc

    要从指定的URL获取网页内容,首先需要创建一个`URL`对象,然后调用`openConnection()`方法得到`HttpURLConnection`实例。为了模拟浏览器(例如IE)的行为,可以设置`User-Agent`请求头。连接建立后,通过`...

    Java通过HttpURLConnection与servlet通信

    Java通过HttpURLConnection与Servlet通信是Web开发中常见的一种交互方式,尤其在客户端和服务端进行数据交换时。HttpURLConnection是Java标准库中提供的一个类,它允许应用程序作为一个HTTP客户端发起请求并接收响应...

    TestHttpForHTML.rar

    3. 兼容性:HttpClient可以处理更老版本的Java,而HttpURLConnection在较新的Java版本中得到更多优化。 4. 开发效率:HttpClient的API更容易理解和使用,可以减少开发时间。 在实际开发中,两者都有其适用场景,...

    Java实现HTTP文件下载

    它创建一个`HttpURLConnection`对象,设置请求方法为GET,然后从连接中获取输入流(`in`),并将其写入到本地文件的输出流(`out`)。 然而,实际的HTTP文件下载可能会涉及到更复杂的情况,比如处理重定向、设置...

    http请求 网络请求 从网路读数据

    在这个例子中,我们首先创建一个URL对象,然后通过`openConnection()`方法得到一个`HttpURLConnection`实例。设置请求方法为GET后,我们可以获取响应码,以确保请求成功。然后通过输入流读取服务器返回的数据,最后...

    Android做网站客户端

    1. **创建HTTP请求**:在Android中,我们通常通过`URL`对象打开一个连接,然后使用`openConnection()`方法得到`HttpURLConnection`实例。设置请求方法(GET或POST),添加请求头,并启用输入流以接收响应。 2. **...

    java 模拟登录(含验证码)

    在实际应用中,可能还需要处理其他复杂情况,例如登录时的重定向、页面的异步加载、动态验证码等。同时,模拟登录应遵守网站的使用条款,避免对目标系统造成过大的负担。 综上所述,Java模拟登录结合OCR技术可以...

    android之http协议编程)第三集hjava_http_post.zip

    在实际开发中,你可能需要处理更多细节,如添加超时设置、处理重定向、管理网络权限、处理JSON或XML数据格式等。此外,考虑到网络请求通常是非阻塞的,你可能需要结合异步任务(如AsyncTask)、线程池或现代的协程库...

    JAVA 模拟网页是登录

    5. **验证登录状态**:登录成功后,服务器通常会重定向到一个特定的页面,或者在响应中包含某些特定的标识来表明已成功登录。可以通过检查返回的HTTP状态码(如302代表重定向)、页面内容或特定的cookie来验证登录...

    qq登录java版本

    在Java环境中,我们可以使用HTTP请求库,如HttpURLConnection或Apache HttpClient,来发送请求并处理响应,实现与QQ登录接口的交互。 1. **OAuth2.0授权机制**: QQ登录基于OAuth2.0授权协议,它允许第三方应用在...

    http request 解析

    在Java中,你可以创建一个URL对象,然后通过`openConnection()`方法得到`HttpURLConnection`实例,如下所示: ```java URL url = new URL("http://example.com"); HttpURLConnection connection = ...

    java 网络及通信

    它提供了更为高级的功能,例如自动重定向处理、身份验证等。 ##### 1. 使用Apache HttpClient发送HTTP请求 下面是一个简单的示例,展示如何使用`HttpClient`发送HTTP GET请求: ```java // 创建HttpClient ...

    Java版|腾讯微博|OAuth2.0授权|官方方法|可发文本和图片|示例代码

    2. **重定向用户授权**:用户访问应用时,应用会引导用户跳转到腾讯微博的授权页面,用户同意后,会被重定向回应用设定的回调地址,并附带一个授权码(Authorization Code)。 3. **获取Access Token**:应用使用...

    天猫精灵云云对接智能家居(java)

    2. **请求授权**:用户在应用中点击授权按钮,应用将跳转到天猫精灵的授权页面,携带客户端ID和重定向URI。用户同意授权后,天猫精灵会将授权码(code)发送到指定的重定向URI。 3. **交换令牌**:应用接收到授权码...

Global site tag (gtag.js) - Google Analytics