• HttpClient 和 HttpURLConnection 共用session


         最近又开始折腾android项目了,项目中需要请求服务器段的接口,又要涉及到图片的资源,比较纠结的是,我开始着手这个项目的时候,网络请求的框架已经完成了,现在存在一个问题就是,请求接口的使用的是HttpClient,这个是已经封装好了,不方便修改的,但是图片下载,如果这套框架的话,很不方便(涉及到多线程下载图片和缓存),挺纠结的,打算用他的框架,但是ListView中的列表图片用HttpClient下载有点太浪费,决定使用HttpURLConnection来下载,就在开始做的时候,遇到了一个很纠结的问题,这个软件需要登录的,登录的时候使用的是HttpClient,这个时候,保存的Session就在HttpClient了,如果我使用HttpURLConnection下载图片的话,服务器发现我的请求没有包含Session,直接跳转到登录界面了,挺纠结的,最后就想到了使用HttpClient HttpURLConnection 共用session,针对这个问题,没搞过,查了一下资料,其实客户端保存的Session就是一个cookie,针对这个问题,自己测试研究了一下,最终还是搞定了,写一下大致的方法:


    如果使用HttpClient登录的话,会从服务器段获取到一个SessionID,得到SessionID的代码如下:

    			List<Cookie> cookies = client.getCookieStore().getCookies();
    			Cookie cookie = null;
    			String sessionId = null;
    			for (int i = 0; i < cookies.size(); i++) {
    				cookie = cookies.get(i);
    				if("jsessionid".equalsIgnoreCase(cookie.getName())){
    					sessionId = cookie.getValue();
    					LogUtil.i(TAG, "cookieId="+sessionId);
    					PreferenceUtils.setData("cookie", sessionId);
    				}
    			}



    以上代码中,SessionId就是登录成功后,得到的SessionId,可以把这个Session保存下来(PreferenceUtils.setData这个方法就是我保存的方法)



    下面就是使用SessionId来共享Session

    			URL m = new URL(url);
    			HttpURLConnection connection = (HttpURLConnection) m.openConnection();
    			String cookie = PreferenceUtils.getData("cookie");
    			connection.setRequestProperty("Cookie", "JSESSIONID="+cookie);
    			InputStream inputStream = connection.getInputStream();


    上面的代码:PreferenceUtils.getData是我获取刚才保存SessionId的方法

    connection.setRequestPreperty这个方法,其实就是给HttpURLConnection添加Header session能与服务器保持回话,其实就是每次请求加上一个Header,这个headerkey就是“Cookie” Value就是“JSESSION=sessionId” 注意大小写,使用的时候,请把sessionId替换成登录成功后获取到的sessionID;相关的技术点就这些,主要还是sessionID的共享!



  • 相关阅读:
    05、汇编语言--环境搭建
    04、计算机基础--编码
    03、计算机基础--数制
    02、计算机基础--8086处理器
    01、计算机基础--计算机概述
    06、JavaEE--SpringMVC
    04、Android系统--Android10
    03、Android系统--Android4.4
    App自动化测试工具Uiautomator2
    Python yaml文件读写
  • 原文地址:https://www.cnblogs.com/springskyhome/p/3689915.html
Copyright © 2020-2023  润新知