用Apache HttpClient实现URL重定向

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/16996489 《用Apache HttpClient实现URL重定向》作者:chszs,转载需注明。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/16996489

《用Apache HttpClient实现URL重定向》

作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs

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

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

本文使用的工具:

1. Apache HttpComponents Client 4.3.1

2. JDK 1.7

1、创建Java项目

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


2、开发

1)创建和配置CloseableHttpClient

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

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

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

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

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

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

package com.ch.net;

import java.io.IOException;
import java.net.URI;
import java.util.List;

import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class UrlRedirectionDemo {
	// 浏览器Agent
	public static String 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
	private static final CloseableHttpClient httpClient = HttpClients
			.custom()
			.setUserAgent(USER_AGENT)
			.setDefaultRequestConfig(
					RequestConfig.custom()
							.setCookieSpec(CookieSpecs.BROWSER_COMPATIBILITY)
							.build()).build();
	
	/**
	 * 根据给定的链接获取所有的重定向位置
	 * @param link 给定的链接
	 * @return
	 * @throws ClientProtocolException
	 * @throws IOException
	 */
	public List<URI> getAllRedirectLocations(String link) throws ClientProtocolException, IOException{
		List<URI> redirectLocations = null;
		CloseableHttpResponse response = null;
		try{
			HttpClientContext context = HttpClientContext.create();
			HttpGet httpGet = new HttpGet(link);
			response = httpClient.execute(httpGet, context);
			
			// 获取所有的重定向位置
			redirectLocations = context.getRedirectLocations();
		} finally{
			if(response!=null){
				response.close();
			}
		}
		return redirectLocations;
	}
	
	public static void main(String[] args) throws ClientProtocolException, IOException{
		// 输入URL
		String link = "http://t.cn/zjYwrl3";
		UrlRedirectionDemo demo = new UrlRedirectionDemo();
		List<URI> 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重定向检测工具测试:


验证OK。




目录
相关文章
|
5月前
|
域名解析 网络协议 开发工具
阿里云DNS常见问题之访问重定向的url访问有问题如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
5月前
|
网络协议 开发工具 Android开发
应用研发平台EMAS产品常见问题之接入httpdns后 访问重定向的url访问有问题如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。
|
应用服务中间件 nginx
Nginx rewrite(URL)地址重定向
Nginx rewrite(URL)地址重定向
518 0
|
2月前
|
Java
Java通过HttpClient从外部url下载文件到本地
该Java程序旨在通过URL将外部网络文件(如图片)下载至本地,并解决防盗链问题。首先,它通过`HttpGet`请求获取远程文件,并通过设置`Referer`头防止防盗链。然后,根据响应内容类型确定文件后缀并保存至指定路径。测试表明,程序能够成功下载文件。
170 8
Java通过HttpClient从外部url下载文件到本地
|
4月前
|
JSON 前端开发 API
Apache HttpClient调用Spring3 MVC Restful Web API演示
Apache HttpClient调用Spring3 MVC Restful Web API演示
38 1
|
5月前
|
安全 网络安全 数据安全/隐私保护
Pikachu URL 重定向通关解析
Pikachu URL 重定向通关解析
|
5月前
|
网络协议 应用服务中间件 nginx
nginx 302 301 设置 url 转跳 nginx 资源重定向 nginx tcp 和 http 转发
nginx 代理后端网站,和 网站资源目录重定向到其他连接地址
183 3
|
4月前
|
Windows
iis配置http重定向302转发get请求并去掉最后的斜杠/ iis重定向 iis去除url最后的斜杠 iis重定向链接斜杠(已解决)
iis配置http重定向302转发get请求并去掉最后的斜杠/ iis重定向 iis去除url最后的斜杠 iis重定向链接斜杠(已解决)
91 0
|
5月前
|
JSON Java Apache
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
227 0
|
5月前
|
数据采集 前端开发 Java
利用Scala与Apache HttpClient实现网络音频流的抓取
利用Scala与Apache HttpClient实现网络音频流的抓取

推荐镜像

更多
下一篇
无影云桌面