httpclient response 重定向

HTTPClient请求后,重定向后,获取重定向的URL。

方法一:重定向后获取URL

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

        }

    }

}

方法二:禁止重定向:

HttpParams params = new BasicHttpParams();
params.setParameter("http.protocol.handle-redirects", false); // 默认不让重定向
post.setParams(params);

时间: 2024-10-13 23:53:56

httpclient response 重定向的相关文章

javaWeb中request请求转发和response重定向

1.访问资源 运用forward方法只能重定向到同一个Web应用程序中的一个资源. 而sendRedirect方法可以让你重定向到任何URL. 2.request.get Forward代码中的"/uu"则代表相对与WEB应用的路径. 举例: Servlet 和 目标文件的包路径: Servlet  代码:中 doPost 和doGet代码: request 重定向url地址 或者是是相对于 本项目 (WEB13)  http:localhost:8080/WEB13+url     

5.Response重定向页面

Response重定向的主要作用就是页面跳转,点击按钮就跳转到另一个页面 这个稍微有点复杂,需要添加2个Web窗体 第一个窗体就随便默认名字了 第二个窗体作为欢迎页面,指定名字为:welcome.aspx 步骤: 1.首先双击第一个窗体的aspx文件 2.将设计视图切换到设计模式 3.在左侧的工具箱里面找到Button(工具箱的快捷按键是Ctrl+Alt+X) 3.将这个控件拖出来放到body的框里面 4.选中这个Button按钮,可以在右边的属性框里进行属性设置,将Text设置为文字“确定”,

response重定向与request转发

重定向与转发的区别: ⑴重定向:将一个请求处理完毕需要执行另一个请求,浏览器重新发送一个请求,重定向请求可以是任意请求.  转发:在相应一个请求的时候,执行一部分之后需要转向另一个请求继续执行,比如servlet处理之后需要转向到jsp显示数据. ⑵运用: 重定向: redirect.sendDirect(转发路径);//次路径可以是任意应用路径 或者: response.setStatus(302);//向浏览器发送302状态码 response.setHeader("location&quo

20160322 javaweb 学习笔记--response 重定向

//一般方法 response.setStatus(302); response.setHeader("Location", "/20160314/index.jsp"); //好方法 response.sendRedirect("/20160314/index.jsp"); 利用response设置状态码为302,并设置响应头Location为要重定向到的地址,就可以实现请求重定向操作了. 为了方便进行请求重定向操作,response提供了re

response重定向的一点坑

自己写的提示错误,网上复制的就没问题--检查了一下一模一样~ 那就在这保存好正确的,以后留着用. index页面: 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//E

HttpClient 302重定向

CloseableHttpClient是线程安全的,单个实例可用于处理多个HTTP请求,Http Client会自动处理所有的重定向,关闭自动重定向需要设定disableAutomaticRetries() RequestConfig config = RequestConfig.custom().setRedirectsEnabled(false).build();//不允许重定向 RequestConfig config = RequestConfig.custom()..build();/

httpclient 302 重定向

主要是由于页面可能不是通过 request.sendRedirect跳转的,可能通过js  location跳转的.所以需要拿跳转后的 地址,重新发送请求...如下所示 if (status == HttpStatus.SC_MOVED_PERMANENTLY || status == HttpStatus.SC_MOVED_TEMPORARILY) { Header locationHeader = hm.getResponseHeader("location"); String l

httpclient的一些学习心得

最近忙于一个项目,了解下httpclient,在这里总结出来,和大家一起学习分享,希望各位朋友提出宝贵的意见. 首先介绍一下项目的背景:   目标:把国内一家保险公司的“WEB一账通”改成“WAP一账通”.   资源:客户不提供任何的webservice接口.   本项目中用到的第三方组件是apache的httpclient,一个非常强大的网页抓取工具(抓这个字用得可能不太好), 这里和大家 一起讨论下httpclient的一些常用用法和要注意的地方. 本文引用的资源列表: httpclient

httpclient学习

httpclient入门:  http://www.ibm.com/developerworks/cn/opensource/os-httpclient/   httpclient证书导入:http://www.blogjava.net/happytian/archive/2006/12/22/89447.html httpclient高级认识:http://laohuang.iteye.com/blog/55613 httpclient官方文档:http://hc.apache.org/htt