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线程让步_动力节点Java学院整理

    Java线程让步_动力节点Java学院整理

    yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权。下面通过本文给大家介绍Java线程让步的相关知识,需要的朋友参考下吧
    2017-05-05
  • Android Studio中ButterKnife插件的安装与使用详解

    Android Studio中ButterKnife插件的安装与使用详解

    本篇文章主要介绍了Android Studio中ButterKnife插件的安装与使用详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Java正则表达式判断字符串中是否包含中文示例

    Java正则表达式判断字符串中是否包含中文示例

    之前一个朋友问我,如何判断字符串中是否包含中文,其实解决的方法很简单,但觉着有必要写出给不知道的朋友们以参考,所以下面这篇文章主要介绍了利用Java正则表达式判断字符串中是否包含中文的方法,需要的朋友可以参考。
    2017-03-03
  • HelloSpringMVC配置版实现步骤解析

    HelloSpringMVC配置版实现步骤解析

    这篇文章主要介绍了HelloSpringMVC配置版实现步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • JAVA读取文件夹大小的几种方法实例

    JAVA读取文件夹大小的几种方法实例

    这篇文章介绍了JAVA读取文件夹大小的几种方法实例,有需要的朋友可以参考一下
    2013-10-10
  • Java线程池submit阻塞获取结果的实现原理详解

    Java线程池submit阻塞获取结果的实现原理详解

    Java线程池中提交任务运行,通常使用execute()方法就足够了。那如果想要实现在主线程中阻塞获取线程池任务运行的结果,该怎么办呢?本文就来和大家一起讨论讨论
    2022-10-10
  • 详解IDEA启动多个微服务的配置方法

    详解IDEA启动多个微服务的配置方法

    这篇文章主要介绍了详解IDEA启动多个微服务的配置方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Java如何替换第一个和最后一个字符串

    Java如何替换第一个和最后一个字符串

    这篇文章主要介绍了Java如何替换第一个和最后一个字符串的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java字符转码的三种方法总结及实例

    java字符转码的三种方法总结及实例

    这篇文章主要介绍了 java字符转码的三种方法总结及实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • 基于java实现简单的图片类别识别

    基于java实现简单的图片类别识别

    这篇文章主要为大家详细介绍了如何基于java实现简单的图片类别识别功能,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12

最新评论