现在单机版本的App已经不多了,基本上都会和服务器进行通信。Android提供Http访问的方式有两种,一种是HttpClient,一种是UrlConnection.这里要说的是HttpClient。

在Http访问中,我们可能会遇到一些这样的场景,比如服务端要求几次Http请求组成一次完整的客户端服务器通信,比如同步。现在的App很多有有账号系统,会提供把用户数据备份的功能,那么这么在线备份功能就是这样的一个场景,它包括登陆、数据上传,结果返回、提交确认或者终止等这样的顺序步骤,每一步都是一次Http访问请求。服务器的设计(负载均衡等)需要要求客户端在这依次完整的数据备份的几次Http访问请求中保持同一个Session.便于服务器的协调和操作,就和用户用浏览器打开网页去完整一件事情一样,这就需要我们在每次Http请求的时候保持Session。

其实保持HttpClient的请求Session,就是保证在每次Http请求访问的请求头信息的Cookie参数中,携带同一个JSESSIONID,只要保证每次是一样的,服务器就认为是同一Session,这就保持了Seesion会话。那么这个JSESSIONID是怎么来的呢,是服务器通过响应头信息给的,服务器在给客户端设置Cookie时,会通过响应头信息中的Set-Cookie参数传递回来,只要有新设置的Cookie,就是通过这个传递过来,如果没有则是null,那么我们就可以在请求完之后返回的信息里读取这个Set-Cookie头信息,然后保存起来,在下次请求的时候给服务器发送过去,就实现了保持Seesion的目的。代码如下:

//定义储存Cookie信息private String cookies;public void executeGet(String url) throws ClientProtocolException, IOException{HttpClient httpClient=new DefaultHttpClient();HttpGet httpGet=new HttpGet(url);setRequestCookies(httpGet);HttpResponse response=httpClient.execute(httpGet);appendCookies(response);}/*** 设置请求的Cookie头信息* @param reqMsg*/private void setRequestCookies(HttpMessage reqMsg) {if(!TextUtils.isEmpty(cookies)){reqMsg.setHeader("Cookie", cookies);}}/*** 把新的Cookie头信息附加到旧的Cookie后面* 用于下次Http请求发送* @param resMsg*/private void appendCookies(HttpMessage resMsg) {Header setCookieHeader=resMsg.getFirstHeader("Set-Cookie");if (setCookieHeader != null&& TextUtils.isEmpty(setCookieHeader.getValue())) {String setCookie=setCookieHeader.getValue();if(TextUtils.isEmpty(cookies)){cookies=setCookie;}else{cookies=cookies+"; "+setCookie;}}}

上面的代码就是一个简单的例子,我们在发送我们的请求之前,把现存的Cookie通过请求头信息发送给服务器,然后再服务器返回的头信息中解析,看是否有需要的更新的Cookie即可,这样我们就达到了保持Seession目的。

当我们需要重新设置Seesion的时候,请求我们保存的cookie即可,这样代码就会重新获取。如果都有个账号并发备份,那么一个账号分配一个cookie变量存储即可,也就是把上面的代码放到一个如HttpManager管理的类里,每个账号的备份都可以new个HttpManager实例,这样每个账号都可以单独处理自己的Cookie,互不干扰。

Android HttpClient Session保持相关推荐

  1. 关于AsyncHttpClient的cz.msebera.android.httpclient.Header

    android-async-http-1.4.9版本去除了httpclient的东西,所以会出现Header[] headers找不到的错误,这里分享下解决办法: 我们先看看官方:https://gi ...

  2. 【androidx86 5.1.1】Android HttpClient请求过程解析(上)

    Android HttpClient请求过程解析 前言:很久没有写源码解析相关的文章了,所谓"三天不写,上房揭瓦",这都仨月啦!前段时间忙着发版,经理有别的事情忙,就把管理发版的事 ...

  3. Android HttpClient post MultipartEntity - Android 上传文件

    转自[http://blog.csdn.net/hellohaifei/article/details/9707089] 在Android 中使用HttpClient,MultipartEntity ...

  4. Android HttpClient GET或者POST请求基本使用方法

    2019独角兽企业重金招聘Python工程师标准>>> 在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的Http ...

  5. android HttpClient,DefaultHttpClient,AbstractHttpClient之间关系

    HttpClient是一个接口,定义了连接和访问规范. /** $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/ ...

  6. android httpClient 支持HTTPS的访问方式

    项目中Android https请求地址遇到了这个异常,javax.net.ssl.SSLPeerUnverifiedException: No peer certificate,是SSL协议中没有终 ...

  7. android httpclient单例模式

    在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们使用各种Http服务.你可以把HttpClient想 ...

  8. Android的post请求工具,android HttpClient get请求与post请求工具类

    今天在学习android的http通信时,在一个网上的demo中,发现了一个个人感觉比较好用的HttpClient发送get请求与post请求的工具类,所以个人把它整理与修改了一下,希望能够帮助有需要 ...

  9. android httpclient gradle,Apache HttpClient Android(Gradle)

    Apache HttpClient Android(Gradle) 我已经将此行添加到我的build.gradle compile group: 'org.apache.httpcomponents' ...

  10. Android HttpClient访问https接口

    由于之前项目的接口需要安全测评,从HTTP变成了https,搞得Android这边也要变,原本以为和移动端没关系.事实错了...我用的是HttpClient来进行访问,没有进行证书验证则会报错.And ...

最新文章

  1. php smarty继承,PHP Smarty 模板 模板继承 {extends}
  2. BZOJ.1109.[POI2007]堆积木Klo(DP LIS)
  3. pip 另一种安装方法:python setup.py install
  4. 和flag_不怕立Flag,就怕没有Flag
  5. sqlrelay mysql_php+sqlrelay+mysql实现连接池及读写负载均衡
  6. 知乎回应月饼问题:忽略了麦芽糖或致部分人不耐受,召回所有月饼
  7. 做实体行业现在难吗?
  8. 从入门到入土:nmap出击:使用nmap扫描某台靶机,给出并解读靶机环境的配置情况
  9. python后台架构Django教程——日志系统
  10. A blog from Sensory
  11. Linux下的.NET之旅:第一站,CentOS+Mono+Xsp构建最简单的ASP.NET服务器
  12. 漫画:互联网公司会议观察
  13. html5经纬度定位 源码_HTML5获取地理经纬度并通过百度接口得到实时位置
  14. XMind初使用【常规操作快捷键】
  15. Bada学习-bada测试服务器
  16. 文件包含漏洞防范措施
  17. GIS应用水平考试2009年度第一次全国统一考试
  18. Eclipse+Java+Swing实现电子商城
  19. w10更新以后DNS服务器未响应,图文详解win10系统dns服务器未响应的措施
  20. python京东抢购手机攻略_Python实现自动上京东抢手机

热门文章

  1. php网上阅卷源码,翰林金榜网上阅卷
  2. 弯管机程序使用三菱FX系列 PLC和昆仑通态触摸屏,也可以用三菱F940系列触摸屏
  3. Qt实践2: 简易计算器
  4. plsql 通过 excel 创建表
  5. 塑胶产品规格书范本_塑胶产品结构设计--卡扣 - 范文中心
  6. 普通table表格样式及代码大全
  7. Berkeley CS 61B 学习笔记 - 1
  8. matlab和vc联合编程
  9. 《数字电子技术基础》5.1 触发器概述、5.2 SR锁存器
  10. 点阵汉字的字模读取与显示