java httpclient 重定向_用Apache HttpClient实现URL重定向

很多网站都使用了URL重定向技术,把一个原始请求从一个位置路由到另一个位置。原因可能是多方面的,比如域名转发、URL缩写、隐私保护、在同一网站维持相似的域名等。

本文讲述怎样使用Apache HTTPComponents HttpClient实现URL重定向。

本文使用的工具:

2. JDK 1.7

1、创建Java项目

项目我命名为HttpClientTest,导入如下JAR包:

0ff03e74e3ad901befb87d4320f291c0.png

2、开发

1)创建和配置CloseableHttpClient

CloseableHttpClient是线程安全的,单个实例可用于处理多个HTTP请求。Http Client会自动处理所有的重定向,除非明确地使用disableAutomaticRetries()关闭自动重定向。

2)使用链接创建HttpGet实例,获取重定向。

3)创建本地HTTP执行上下文HttpClientContext。

4)使用Http Client并传递本地实例HttpClientContext,执行HttpGet请求。

5)成功执行请求后,使用上下文对象来获取所有的重定向位置。

6)关闭响应CloseableHttpResponse,释放资源。

packagecom.ch.net;

importjava.io.IOException;

importjava.net.URI;

importjava.util.List;

importorg.apache.http.client.ClientProtocolException;

importorg.apache.http.client.config.CookieSpecs;

importorg.apache.http.client.config.RequestConfig;

importorg.apache.http.client.methods.CloseableHttpResponse;

importorg.apache.http.client.methods.HttpGet;

importorg.apache.http.client.protocol.HttpClientContext;

importorg.apache.http.impl.client.CloseableHttpClient;

importorg.apache.http.impl.client.HttpClients;

publicclassUrlRedirectionDemo {

// 浏览器Agent

publicstaticString USER_AGENT ="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.151 Safari/535.19";

// 创建并配置HttpClient

privatestaticfinalCloseableHttpClient httpClient = HttpClients

.custom()

.setUserAgent(USER_AGENT)

.setDefaultRequestConfig(

RequestConfig.custom()

.setCookieSpec(CookieSpecs.BROWSER_COMPATIBILITY)

.build()).build();

/**

* 根据给定的链接获取所有的重定向位置

* @param link 给定的链接

* @throws ClientProtocolException

* @throws IOException

*/

publicList getAllRedirectLocations(String link)throwsClientProtocolException, IOException{

List redirectLocations = null;

CloseableHttpResponse response = null;

try{

HttpClientContext context = HttpClientContext.create();

HttpGet httpGet = newHttpGet(link);

response = httpClient.execute(httpGet, context);

// 获取所有的重定向位置

redirectLocations = context.getRedirectLocations();

} finally{

if(response!=null){

response.close();

}

}

returnredirectLocations;

}

publicstaticvoidmain(String[] args)throwsClientProtocolException, IOException{

// 输入URL

String link = "http://t.cn/zjYwrl3";

UrlRedirectionDemo demo = newUrlRedirectionDemo();

List allRedirectLocations = demo.getAllRedirectLocations(link);

if(allRedirectLocations!=null){

System.out.println(link);

for(URI uri : allRedirectLocations){

System.out.println("|\nv\n"+ uri.toASCIIString());

}

} else{

System.out.println("Not found!");

}

}

}

如果使用默认的User-Agent设置,有些网站会返回HTTP 500状态码错误。一旦网站返回200状态码而且返回的HTML的内容是“500 server error”时,为保证兼容性,应该使用标准的Web浏览器的User-Agent字符串。

500 – 服务器内部错误

200 - 服务器成功返回网页

3、运行

我在新浪微博中找了个URL缩短的地址作为输入,执行后,果然找到了重定向地址。

控制台输出为:

http://t.cn/zjYwrl3

|

v

http://hero.pongo.cn/

4、验证

用在线URL重定向检测工具测试:

d00b99331d0846ec428daeaf4eb39475.png

验证OK。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值