httpclient 中post请求重定向

背景:使用httpclient 的post请求进行登录,需要重定向登录,请求重定向后的地址

在httpclient中post请求不像get请求自己可以重定向,实现方式是 判断post请求返回码是否是302,如果是那么就获取传递过来的Location的地址,进行拼接,在进行一个get的请求

实现代码

public Map<String, String> doPost(String url, Map<String, String> map, String charset) {
		HttpClient httpClient = null;
		HttpPost httpPost = null;
		String result = null;
		String domain = "http://user.hqygou.com";
		Map<String, String> returnmap = new HashMap<String, String>();
		try {
			httpClient = new SSLClient();
			httpPost = new HttpPost(url);
			// 设置参数
			List<NameValuePair> list = new ArrayList<NameValuePair>();
			Iterator iterator = map.entrySet().iterator();
			while (iterator.hasNext()) {
				Entry<String, String> elem = (Entry<String, String>) iterator.next();
				list.add(new BasicNameValuePair(elem.getKey(), elem.getValue()));
				System.out.println("请求的参数为:" + elem.getKey() + ":" + elem.getValue());
			}
			if (list.size() > 0) {
				UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, charset);
				httpPost.setEntity(entity);
			}
			// 设置头部信息
			httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
			HttpResponse response = httpClient.execute(httpPost);

			if (response != null) {
				int code = response.getStatusLine().getStatusCode();
				System.out.println("返回的code为:" + code);
				if (code == 302) {  #判断post的请求返回码
					Header[] hr = response.getAllHeaders();
					for (int i = 0; i < hr.length; i++) {
						Header header1 = hr[i];
						System.out.println("头部的所有内容:" + header1);
					}
					String hearder = response.getHeaders("Location")[0].toString().split(":")[1].trim(); #获取返回码中头部中location 就是重定向的地址
					String redirecturl = domain + hearder;  //需要和域名进行拼接
					System.out.println("开始重定向,地址为:" + redirecturl);
					cookies = response.getHeaders("Set-Cookie")[0].toString().split(":")[1].trim();
					System.out.println("获取的cookie:" + cookies);
					cookies = cookies.split(";")[0].trim();
					httpGet(redirecturl, cookies);  #get请求,把获取的cookie进行一个拼接
				} else {
					HttpEntity resEntity = response.getEntity();
					if (resEntity != null) {
						result = EntityUtils.toString(resEntity, charset);
					}
				}
				returnmap.put("content", result);
				returnmap.put("cookies", cookies);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return returnmap;
	}

  运行入口

	public static void main(String[] args) {
		test post = new test();
		String url = "http://xxx/login/index/checklogin";
		Map<String, String> map = new HashMap<String, String>();
		map.put("from", "xx");
		map.put("username", "xx");
		map.put("password", "xx");
		post.doPost(url, map, "UTF-8");
	}

  

注,后面这个200,是get请求时返回的内容,get请求可以查看另外一篇文章,http://www.cnblogs.com/chongyou/p/7808035.html

时间: 2024-07-29 18:44:24

httpclient 中post请求重定向的相关文章

HttpClient中post请求http、https示例

HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议. 使用HttpClient发送请求.接收响应很简单,一般需要如下几步即可: 创建CloseableHttpClient对象. 创建请求方法的实例,并指定请求URL.如果需要发送GET请求,创建HttpGet对象:如果需要发送POST请求,创建HttpPost对象. 如果需要发送请求参数,可可调用

Servlet中的请求转发和重定向

跳转和重定向 有的时候客户端请求到达服务端后需要对请求重新转发到其它Servlet甚至别的服务器,这就需要跳转和重定向. 区别 一般来说,跳转是服务器内部跳转,例如将请求从一个Servlet转发给另外一个Servlet处理,是内部之间的转发.而重定向是告诉客户端去别的地方请求资源.举个例子,某人需要去找人事部门打印收入证明,而收入证明需要去财务部盖章.跳转的处理方式是:人事部门的人告诉你,你等一下,我去把收入证明打印出来,然后我再去找财务部盖章,所有资料准备好后,我再全部交给你.重定向的处理方式

JavaWeb中的 请求转发 和 重定向

请求转发:forward();            重定向:sendRedirect() 来看具体实例: 在HTML页面写两个a链接请求,这个就是get请求了,然后建立与请求对应的servlet,页面代码如下所示: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>请求转发实例</title> 6 </head>

Servlet中请求重定向和请求转发和include

响应的重定向 response.sendRedirect("ShowMSgSerlet1");//请求重定向 会将后面的浏览器的url改变. 请求转发 RequestDispatcher rd=request.getRequestDispatcher("../index.jsp");//创建对象 rd.forward(request, response);//将对象进行转发 不会浏览器的url改变 include RequestDispatcher rd=reque

在购物过程中的购买用请求重定向不用转发的原因

首先: 需要了解请求重定向与转发的区别 重定向:跳转成功后地址栏发生改变,向服务器发送两次请求,有两对response和request 转   发:跳转成功后地址栏不变,但显示的是跳转到的页面的内容,向服务器发送一次请求,有一对response和request 现在来讨论在商品购买成功后跳转到已买商品页面不用转发而用重定向: 重定向:客户端------(请求1)------->服务器servlet购买 客户端------(请求2)------->服务器的购买页面 当点击刷新时,只会重复出现购买

【JAVA】通过HttpClient发送HTTP请求的方法

HttpClient介绍 HttpClient 不是一个浏览器.它是一个客户端的 HTTP 通信实现库.HttpClient的目标是发 送和接收HTTP 报文.HttpClient不会去缓存内容,执行 嵌入在 HTML 页面中的javascript 代码,猜测内容类型,重新格式化请求/重定向URI,或者其它和 HTTP 运输无关的功能. HttpClient使用 使用需要引入jar包,maven项目引入如下: 1 <dependency> 2 <groupId>org.apache

Android中客户端请求服务器端的方式讲解(一)附源码

Android中客户端请求服务器端的两种方式:Post方式和Get方式 在这里不直接赘述了,直接上源码如下: (1).Post的方式: /** * Post的请求方式 * * @param model * 请求序号 * @param paramList * 客户端请求的数据参数列表 * @return */ public JSONObject doPost(int model, List<NameValuePair> paramList) { try { // 客户端向服务器发送请求的数据 L

请求转发与请求重定向

----请求重定向:客户端行为,response.sendRedirect(); 从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变. ----请求转发:服务器行为,request.getRequestDispatcher().forward(req,resp); 其本质是一次请求,转发后请求对象会保存在request中,地址栏URL地址不会改变.

Java中转发VS重定向

转发和重定向是何方圣神?在之前只知道它就是解决页面跳转问题的,通过对drp的一步步学习,对它们的应用也越来越多.这时又给自己带来了更多的疑问?它到的是什么?怎么用?它又和asp.net中的页面跳转有什么区别?接下来先对它们两进行下系统的学习吧! 一.是什么? 转发:服务器接收到客户端的请求之后,服务器把控制权交到另一个JSP页面手里,新的JSP页面接收到请求之后根据情况是继续转交控制权或者显示页面由自己决定,到最后显示页面的整个过程就是一个页面跳转过程,在这个过程中,服务器可以把请求的数据在经过