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试试,这个程序实现的是一个很简单的网页阅读器呵!
分享到:
相关推荐
在Java编程中,`HttpURLConnection`是用于处理HTTP请求的核心类,它位于`java.net`包下,是标准的Java API。这个类提供了一个接口,让我们能够与HTTP服务器进行交互,执行GET、POST等HTTP方法。`HttpURLConnection`...
在实际应用中,我们需要获取到重定向后的URL以便正确处理请求。本文将详细介绍两种在Java中获取302重定向URL的方法。 ### 方法一:使用`HttpURLConnection` `HttpURLConnection`是Java内置的HTTP客户端,它提供了...
总结,`HttpURLConnection`是Java中处理HTTP请求的首选工具,其灵活性和易用性使得在各种网络编程场景中都得到了广泛应用。通过理解并熟练运用上述知识,开发者能够轻松地进行HTTP通信,同时解决可能出现的编码问题...
2. **打开连接**:然后,通过调用`openConnection()`方法,你可以得到一个`HttpURLConnection`实例: ```java HttpURLConnection connection = (HttpURLConnection) url.openConnection(); ``` 3. **设置请求...
但随着Android版本的更新,这些问题得到了解决,现在HttpURLConnection成为了首选。 在实际应用中,你可能还需要处理更多细节,例如添加请求头、处理超时、处理重定向、错误处理等。此外,对于现代Android应用,...
要从指定的URL获取网页内容,首先需要创建一个`URL`对象,然后调用`openConnection()`方法得到`HttpURLConnection`实例。为了模拟浏览器(例如IE)的行为,可以设置`User-Agent`请求头。连接建立后,通过`...
Java通过HttpURLConnection与Servlet通信是Web开发中常见的一种交互方式,尤其在客户端和服务端进行数据交换时。HttpURLConnection是Java标准库中提供的一个类,它允许应用程序作为一个HTTP客户端发起请求并接收响应...
3. 兼容性:HttpClient可以处理更老版本的Java,而HttpURLConnection在较新的Java版本中得到更多优化。 4. 开发效率:HttpClient的API更容易理解和使用,可以减少开发时间。 在实际开发中,两者都有其适用场景,...
它创建一个`HttpURLConnection`对象,设置请求方法为GET,然后从连接中获取输入流(`in`),并将其写入到本地文件的输出流(`out`)。 然而,实际的HTTP文件下载可能会涉及到更复杂的情况,比如处理重定向、设置...
在这个例子中,我们首先创建一个URL对象,然后通过`openConnection()`方法得到一个`HttpURLConnection`实例。设置请求方法为GET后,我们可以获取响应码,以确保请求成功。然后通过输入流读取服务器返回的数据,最后...
1. **创建HTTP请求**:在Android中,我们通常通过`URL`对象打开一个连接,然后使用`openConnection()`方法得到`HttpURLConnection`实例。设置请求方法(GET或POST),添加请求头,并启用输入流以接收响应。 2. **...
在实际应用中,可能还需要处理其他复杂情况,例如登录时的重定向、页面的异步加载、动态验证码等。同时,模拟登录应遵守网站的使用条款,避免对目标系统造成过大的负担。 综上所述,Java模拟登录结合OCR技术可以...
在实际开发中,你可能需要处理更多细节,如添加超时设置、处理重定向、管理网络权限、处理JSON或XML数据格式等。此外,考虑到网络请求通常是非阻塞的,你可能需要结合异步任务(如AsyncTask)、线程池或现代的协程库...
5. **验证登录状态**:登录成功后,服务器通常会重定向到一个特定的页面,或者在响应中包含某些特定的标识来表明已成功登录。可以通过检查返回的HTTP状态码(如302代表重定向)、页面内容或特定的cookie来验证登录...
在Java环境中,我们可以使用HTTP请求库,如HttpURLConnection或Apache HttpClient,来发送请求并处理响应,实现与QQ登录接口的交互。 1. **OAuth2.0授权机制**: QQ登录基于OAuth2.0授权协议,它允许第三方应用在...
在Java中,你可以创建一个URL对象,然后通过`openConnection()`方法得到`HttpURLConnection`实例,如下所示: ```java URL url = new URL("http://example.com"); HttpURLConnection connection = ...
它提供了更为高级的功能,例如自动重定向处理、身份验证等。 ##### 1. 使用Apache HttpClient发送HTTP请求 下面是一个简单的示例,展示如何使用`HttpClient`发送HTTP GET请求: ```java // 创建HttpClient ...
2. **重定向用户授权**:用户访问应用时,应用会引导用户跳转到腾讯微博的授权页面,用户同意后,会被重定向回应用设定的回调地址,并附带一个授权码(Authorization Code)。 3. **获取Access Token**:应用使用...
2. **请求授权**:用户在应用中点击授权按钮,应用将跳转到天猫精灵的授权页面,携带客户端ID和重定向URI。用户同意授权后,天猫精灵会将授权码(code)发送到指定的重定向URI。 3. **交换令牌**:应用接收到授权码...