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