HttpClient_用Apache HttpClient实现URL重定向

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

时间: 2024-10-09 22:18:54

HttpClient_用Apache HttpClient实现URL重定向的相关文章

Apache服务器的URL重定向

前端时间要整个Apache重定向功能,在此记录一下. 一.安装Apache Windows版本官方下载安装文件httpd-2.2.21-win32-x86-openssl-0.9.8r,选择安装目录,直接安装就好. 安装完后,Services 和 任务栏会有Apache的服务出现. 二.Apache目录结构 主要是conf配置信息文件夹和modules功能模块文件夹. 主要的配置文件: C:\Program Files (x86)\Apache Software Foundation\Apach

Apache Rewrite url重定向功能的简单配置

Rewrite url重定向就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范.平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等 1.Apache Rewrite的主要功能 就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范.平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等 2.Apache Rewrite的配置 Apache下的Rewrite配置主要有两种,一种是针对整个apache服务器的配置,此种配置的Rewrite规则是直接在httpd.con

使用.htaccess实现apache URL重定向

一.什么是URL重定向? URL重定向(URL redirection,或称网址重定向或网域名称转址),是指当使用者浏览某个网址时,将他导向到另一个网址的技术. 二.URL重定向怎么配置? 1)首先需要apache开启重定向,修改httpd.conf配置: 1 查找: 2 Options FollowSymLinks 3 AllowOverride None 5 改为: 6 Options FollowSymLinks 7 AllowOverride All 2)去掉下面的注释 LoadModu

Apache HttpClient访问网络工具类

1 package com.ztravel.utils; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org

Apache HttpClient : Http Cookies

前言 HttpClient已经被集成到Android的SDK里,但在JDK里面仍然需要HttpURLConnectionn发起HTTP请求.HttpClient可以看做是一个加强版的HttpURLConnection,但它的侧重点是如何发送请求.接受相应和管理Http连接. 在介绍Http Cookies之前,笔者给出一个应用场景:你需要一个根据地理信息(城市名或者经纬度)获取天气的应用.可选的API很多,不幸的是,网上提到的Google天气API已经停止服务了(不是被墙):雅虎是英文的,且需要

PHP网站实现地址URL重定向

网站建设中,通常会用到网站地址URL的重定向,这样的好处是有利于你网站的SEO优化,也就是让你的网站实现伪静态,下面简单介绍一下实现的两种方法: 1.在Apache配置文件中设置重定向 首先找到Apache配置文件httpd.conf,在配置文件中找到下面代码 LoadModule rewrite_module modules/mod_rewrite.so,将其打开(就是将前面#去除). 然后打开输出phpinfo()函数,如果在模块中开启了mod_rewrite模块,就说明上面一步成功啦,如下

Apache Rewrite实现URL的跳转和域名跳转

Apache Rewrite实现URL的跳转和域名跳转 Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言.可基 于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式.如果要想用到rewrite模块,必须先安装或加载rewrite模块.方法有两种一种是编译apache的时候就直接 安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块. 基于服务器级的(httpd.co

论httpclient上传带参数【commons-httpclient和apache httpclient区别】

需要做一个httpclient上传,然后啪啪啪网上找资料 1.首先以前系统中用到的了commons-httpclient上传,找了资料后一顿乱改,然后测试 PostMethod filePost = new PostMethod(url); filePost.setParameter("system", "vinuxpost"); try { Part part[] = UploadRequestHelper.getPart(request); filePost.s

ThinkPHP URL 重定向

想要去掉index.php, 因为所有地址都带着这个显得太长了. 步骤如下: 1.修改apache的配置文件httpd.conf 打开putty,执行如下命令 vim /etc/httpd/conf/httpd.conf i  //进入编辑模式 /mod_rewrite.so //执行查找命令,将加载模块前的#去掉 /AllowOverride  //执行查找命令,AllowOverride None 将None改为 Al esc :wq //保存退出 vim .htaccess //进入ind