httpclient 中post请求重定向
背景:使用httpclient 的post请求进行登录,需要重定向登录,请求重定向后的地址
在httpclient中post请求不像get请求自己可以重定向,实现方式是 判断post请求返回码是否是302,如果是那么就获取传递过来的Location的地址,进行拼接,在进行一个get的请求
实现代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 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; } |
运行入口
1 2 3 4 5 6 7 8 9 | 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
作者:做梦的人(小姐姐) 出处:https://www.cnblogs.com/chongyou/ 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。 如果文中有什么错误,欢迎指出。以免更多的人被误导。 微信号:18582559217 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2015-11-09 ADB无线连接