1.3 Redict

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:10   2309   0

1.3 Redict


在获取网页的过程中,往往会发生跳转,为了有效的处理跳转,需要用getStatusCode()方法获取服务器的状态码并且加以判断,如果返回值是以3开头的,那么则发生了跳转,这时候要确定新的地址,常见的几个以3开头的状态码是HttpStatus.SC_MOVED_TEMPORARILYHttpStatus.SC_MOVED_PERMANENTLY) HttpStatus.SC_SEE_OTHER

SC_TEMPORARY_REDIRECT。可以通过读取HTTP头中的location属性来获取新的地址,进而完成页面的下载,因此我们有必要处理网页的重定向。 下面的代码片段演示如何处理页面的重定向
package book;

import java.io.IOException;

import org.apache.commons.httpclient.*;

import org.apache.commons.httpclient.methods.*;

/**

* 最简单的HTTP客户端,用来演示通过GET方式访问某个页面

* @author wangpeng

*/

public class SimpleClient {

public static void main(String[] args) throws IOException {

HttpClient client = new HttpClient();

// 使用GET方法

HttpMethod get = new GetMethod("http://search.tianya.cn/bbs?q=gh");

client.executeMethod(get);

// 打印服务器返回的状态

System.out.println(get.getStatusLine());

//处理重定向

int statuscode = get.getStatusCode();

if ((statuscode == HttpStatus.SC_MOVED_TEMPORARILY) ||

(statuscode == HttpStatus.SC_MOVED_PERMANENTLY) ||

(statuscode == HttpStatus.SC_SEE_OTHER) ||

(statuscode == HttpStatus.SC_TEMPORARY_REDIRECT)

)

{

//读取新的URL地址

Header header = get.getResponseHeader("location");

if (header != null){

String newuri = header.getValue();

if ((newuri == null) || (newuri.equals("")))

newuri = "/";

GetMethod redirect = new GetMethod(newuri);

client.executeMethod(redirect);

System.out.println("Redirect:"+

redirect.getStatusLine().toString());

} else{

System.out.println("Invalid redirect");

}

}

// 打印返回的信息

System.out.println(get.getResponseBodyAsString());

// 释放连接

get.releaseConnection();

}

}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP