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

代码如下:

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();
  }
 }
}

(0)

相关推荐

  • AndroidHttpClient使用Cookie应用分析

    今天想把一个用使用了HttpClient的自动签到小程序移植到Android上,还好Android的SDK自带了HttpClient的包.翻Android的文档时发现官方还提供了一个实现了HttpClient接口的AndroidHttpClient,上网搜了下没发现关于AndroidHttpClient的文章.当然也可以继续使用DefaultHttpClient,但用为Android定制的AndroidHttpClient自然更好. 下面是2个测试用的HttpServlet: 复制代码 代码如下

  • C# HttpClient Cookie验证解决方法

    自实现的cookie 验证,远程取值的例子 以下代码配合HttpClient使用可以实现跨域(cookie的读写) //验证 复制代码 代码如下: HttpClient httpClient = new HttpClient(url, null, true); httpClient.PostingData.Add(key,value);//登录用户名 httpClient.PostingData.Add(key,value);//密码 string str = httpClient.GetStr

  • httpclient模拟登陆具体实现(使用js设置cookie)

    httpclient模拟登陆(使用js设置cookie) 复制代码 代码如下: <html> <meta http-equiv='Content-Type' content='text/html; charset=gb2312'> <link rel=stylesheet type=text/css href='/bbs.css'> <script>document.cookie='utmpnum=51;path=/;domain=.' + window.l

  • 使用httpclient实现免费的google翻译api

    由於Google translate API要收錢 ,因此想了一個偷機的方法 1. 用HttpClient發送一個request給http://translate.google.com 2. 再用Jsoup來parse html, 並取出翻譯後的文字 复制代码 代码如下: /** * Copyright (c) blackbear, Inc All Rights Reserved. */package org.bb.util.i18n; import java.io.InputStream;im

  • 探讨:使用httpClient在客户端与服务器端传输对象参数的详解

    昨天把httpClient的源代码下载来看了一下. 稍微跟踪了一下,最终还是使用java.net包的东西.不过封装的实在是漂亮.写程序方便多了.不过还是建议最好先熟悉net包下的东西.为了测试写了个在客户端和服务器段传对象的代码. 简单的传递了一个字符串. 如果复杂点可以传其他的对象,在参数里给出class name之类的信息.服务器端就可以使用反射来做一些实用的操作了.客户端: 复制代码 代码如下: import java.io.IOException;import java.io.Seria

  • HttpClient抓取网页的两种方式

    一.利用NodeFilter对网页进行分析 1.生成一个Parser a.通过url提取网络上的网页 复制代码 代码如下: Parser parser = new Parser(); parser.setURL("http://www.yahoo.com.cn"); b.提取本地网页文件 通过读文件把网页文件转化成字符串: 复制代码 代码如下: Parser parser=Parser.createParser(html,charset); 2.利用NodeFilter做一个filte

  • Android 中HttpURLConnection与HttpClient使用的简单实例

    1:HttpHelper.java 复制代码 代码如下: public class HttpHelper {    //1:标准的Java接口    public static String getStringFromNet1(String param){        String result="";        try{            URL url=new URL(param);            HttpURLConnection conn=(HttpURLCo

  • Android下通过httpClient发送GET和POST请求的实例代码

    复制代码 代码如下: public class HttpUtil { public static String sendDataByHttpClientGet(String path,String name,String pass){        String result = "";        //1.获取到一个浏览器        HttpClient client = new DefaultHttpClient();        //2.准备请求的地址        tr

  • ASP.NET MVC Web API HttpClient简介

    1.HttpClient简单介绍 依稀还记得那个时候用WebClient,HttpWebRequest来发送一个请求,现在ASP.NET MVC4中自带了一个类HttpClient,用于接收HttpResponseMessage和发送HttpRequestMesssage. 问题在于既然WebClient,HttpWebRequest可以完成相应的功能,为什么还要使用HttpClient类,.NET Framework中既然提出了这样一个类肯定是有其特别之处的,这里罗列几个不同之处: (1) 可

  • Android HttpClient GET或者POST请求基本使用方法

    在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们使用各种Http服务.你可以把HttpClient想象成一个浏览器,通过它的API我们可以很方便的发出GET,POST请求(当然它的功能远不止这些) 这里只介绍如何使用HttpClient发起GET或者POST请求 GET 方式 复制代码 代码如下: //先将参数放入List,再对参数进行URL编码 List<BasicNameValuePair>

随机推荐