分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

httpclient 中post请求重定向

发布时间:2023-09-06 01:23责任编辑:熊小新关键词:http

背景:使用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 

httpclient 中post请求重定向

原文地址:http://www.cnblogs.com/chongyou/p/7807986.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved