很多网站都使用了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。

HttpClient_用Apache HttpClient实现URL重定向相关推荐

  1. 用Apache HttpClient实现URL重定向

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow <用Apac ...

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

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

  3. Apache配置URL重定向

    Apache配置URL重定向 修改/etc/httpd/conf/httpd.conf文件的内容 <Directory "/var/www">AllowOverride ...

  4. Apache URL重定向指南

    Apache URL重定向指南 2004-01-28 21:01:11 Engelschall 阅读 <script src="http://www.meetchinese.com/e ...

  5. Apache HttpClient 4 3开发指南

    <Apache HttpClient 4.3开发指南> 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.概述 Apache HttpCli ...

  6. Apache HttpClient

    文章目录 Apache HttpClient 简介 Apache HttpClient特性 使用流程 使用实例 -END- Apache HttpClient 简介 HttpClient 是 Apac ...

  7. 使用ATS中的regex_remap插件实现正则匹配的url重定向

    要点总结如下: 1.正向和反向代理可以同时并存,并且remap可以兼容这两种模式. 2.在使用regex_map时,是借助remap的配置来设置,而且remap.so和regex_remap.so已经 ...

  8. Apache如何将HTTP重定向到HTTPS

    这篇文章将为大家详细讲解有关Apache如何将HTTP重定向到HTTPS,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解.  在Apache中强制将HTT ...

  9. okhttp3测试框架_easy-okhttp: 这是一个对okhttp3进行封装的工具,提供了更为便捷的方法调用。目的是为了替换难用的apache HttpClient。...

    easy-okhttp 简介 项目easy-okhttp是对okhttp网络框架(https://github.com/square/okhttp)上层封装, 支持文件上传和下载,表单(含文件)提交, ...

最新文章

  1. php批量处理图片大小,word图片怎么批量调整大小
  2. mysqlbinlog flashback 使用最佳实践
  3. 设计总结:腾讯光子《和平精英》全新UI 2.0如何升级至效果拉满?
  4. 6.824 RPC lesson2 2020(二)
  5. iBatis for Net 代码生成器(CodeHelper)附下载地址(已经升级为V 1.1)
  6. C++笔记-DLL的编写与调用
  7. beanfactory的实现类_ApplicationContext和BeanFactory的区别
  8. apache struts linux,Apache Struts2远程代码执行漏洞(S2-053)(CVE-2017-12611)
  9. content=IE=edge,chrome=1的meta标签内容
  10. interpeter用python还是pythonw_python-interpreter
  11. 燃料电池系统建模(未完待续)
  12. LTSC2019的踩坑经验
  13. iOS从零开始,使用Swift:探索基础框架
  14. nexus私服npm包踩坑记录
  15. 使用h5制作一个五子棋游戏
  16. 手机服务器异常修复,手机服务器异常
  17. 速看|快速软件开发框架突破信息孤岛,高效实现数字化发展!
  18. citymaker 8 sketchup和3dsmax直接导出fdb
  19. VR科普主题项目VR模拟体验设备VR科普馆
  20. x58添加uefi_修改为UEFI引导的方法,不需要重装

热门文章

  1. 远程下层文档 正在打印_长宁打印机随叫随到,送货上门
  2. java类作为多层级的数据实体_API json多层数据实体类封装(利用泛型技术)
  3. win10怎么激活python_无法在Windows 10中激活Python venv
  4. python flask框架下登录注册界面_Python的Flask框架中实现简单的登录功能的教程
  5. centos7共享网络盘_实验08:局域网文件和互联网文件的共享
  6. everything搭配什么软件_带你飞起来的好工具Everything,极速找到你所要的文件
  7. python分析数据走势_Python数据分析及可视化实例之个股走势预测(26)
  8. java xml 表达式语言_中级Java开发工程师笔试题
  9. python itertools卡死_Python使用itertools模块来解决算法问题,python
  10. php raido mysql,linux – 如何停止并修复已失败且I / O挂起的RAID 5阵列?