httpclient重定向之后获取网址信息示例

 更新时间:2014年02月16日 16:46:06   作者:  
使用HttpClient进行127.0.0.1:8080地址的问题,然后该地址自动重定向127.0.0.1:8080/mobserver,如何获取该地址呢?使用HttpContext,下面是示例

复制代码 代码如下:

import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.entity.ContentType;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.ExecutionContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;

public class HttpClientDemo {

 /**
  * 获取重定向之后的网址信息
  * @see HttpClient缺省会自动处理客户端重定向
  * @see 即访问网页A后,假设被重定向到了B网页,那么HttpClient将自动返回B网页的内容
  * @see 若想取得B网页的地址,就需要借助HttpContext对象,HttpContext实际上是客户端用来在多次请求响应的交互中,保持状态信息的
  * @see 我们自己也可以利用HttpContext来存放一些我们需要的信息,以便下次请求的时候能够取出这些信息来使用
  */
 public static void getRedirectInfo(){
  HttpClient httpClient = new DefaultHttpClient();
  HttpContext httpContext = new BasicHttpContext();
  HttpGet httpGet = new HttpGet("http://127.0.0.1:8088/blog/main.jsp");
  try {
   //将HttpContext对象作为参数传给execute()方法,则HttpClient会把请求响应交互过程中的状态信息存储在HttpContext中
   HttpResponse response = httpClient.execute(httpGet, httpContext);
   //获取重定向之后的主机地址信息,即"http://127.0.0.1:8088"
   HttpHost targetHost = (HttpHost)httpContext.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
   //获取实际的请求对象的URI,即重定向之后的"/blog/admin/login.jsp"
   HttpUriRequest realRequest = (HttpUriRequest)httpContext.getAttribute(ExecutionContext.HTTP_REQUEST);
   System.out.println("主机地址:" + targetHost);
   System.out.println("URI信息:" + realRequest.getURI());
   HttpEntity entity = response.getEntity();
   if(null != entity){
    System.out.println("响应内容:" + EntityUtils.toString(entity, ContentType.getOrDefault(entity).getCharset()));
    EntityUtils.consume(entity);
   }
  } catch (Exception e) {
   e.printStackTrace();
  }finally{
   httpClient.getConnectionManager().shutdown();
  }
 }
}

相关文章

  • Java中IdentityHashMap与HashMap区别详解

    Java中IdentityHashMap与HashMap区别详解

    这篇文章主要介绍了Java中IdentityHashMap与HashMap区别详解,很多人不晓得IdentityHashMap的存在,其中不乏工作很多年的Java开发者,他们看到就说是第三方jar包,实际上它是Jdk源码自带的集合类,需要的朋友可以参考下
    2023-11-11
  • mybatis Example Criteria like 模糊查询问题

    mybatis Example Criteria like 模糊查询问题

    这篇文章主要介绍了mybatis Example Criteria like 模糊查询问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 自定义Spring Security的身份验证失败处理方法

    自定义Spring Security的身份验证失败处理方法

    在本篇文章里小编给大家整理了一篇关于自定义Spring Security的身份验证失败的处理方法,有需要的朋友们学习下。
    2019-05-05
  • Java实现队列的N种方法

    Java实现队列的N种方法

    在Java中,我们可以使用不同的方式来实现队列,本文主要介绍了Java实现队列的N种方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • java中利用栈实现字符串回文算法

    java中利用栈实现字符串回文算法

    给定一个由多个a和b组成的字符串数组,字符串中有一个特殊的字符X,位于字符串的正中间,例如(aaaabbbbXabaabbbb),如何判定该字符串是否回文
    2020-12-12
  • java使用ant.jar解压缩文件的示例代码

    java使用ant.jar解压缩文件的示例代码

    这篇文章主要介绍了java使用ant.jar解压缩文件,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • JVM的基本介绍以及垃圾回收

    JVM的基本介绍以及垃圾回收

    垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空间,防止内存泄露,这篇文章主要给大家介绍了关于JVM垃圾回收的相关资料,需要的朋友可以参考下
    2021-09-09
  • 使用Nexus搭建Maven私服的方法步骤

    使用Nexus搭建Maven私服的方法步骤

    这篇文章主要介绍了使用Nexus搭建Maven私服的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 在SpringBoot中配置Thymeleaf的模板路径方式

    在SpringBoot中配置Thymeleaf的模板路径方式

    这篇文章主要介绍了在SpringBoot中配置Thymeleaf的模板路径方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • JAVA GUI自定义JPanel画板背景

    JAVA GUI自定义JPanel画板背景

    这篇文章主要为大家详细介绍了JAVA GUI自定义JPanel画板背景的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12

最新评论