httpclient cookie相关介绍
http状态管理
cookie是HTTP代理和目标服务器可以交流保持回话的状态信息的令牌或短包。
httpclient使用Cookie接口来代表抽象的cookie令牌,在它的简单形式中http的cookie是键/值对.
通常一个http的cookie也包含一些属性,比如版本号,合法的域名,指定cookie应用所在的源服务器url子集的路径,cookie的最长有效期
SetCookie接口代表源服务器发送给http代理的响应中的头部信息Set-Cookie来维持一个对话状态
SetCookie2接口和指定Set-Cookie2方法扩展了Set-Cookie
SetCookie接口和额外的如获取原始cookie属性的能力,就像他们由源服务器指定的客户端特定功能扩展了Cookie接口。
这对生成Cookie头部很重要,因为一些cookie规范需要
Cookie头部应该包含在Set-Cookie或Set-Cookie2头部指定的特定属性
cookie版本
Cookie兼容网景公司的草案标准,但是版本0被认为是不符合官方规范的。
符合标准的cookie的期望版本是1.
httpclient可以处理基于不同版本的cookie
BasicClientCookie netscapeCookie = new BasicClientCookie("name","value");
netscapeCookie.setVersion(0);
netscapeCookie.setDomain("127.0.0.1");
netscapeCookie.setPath("/");
----
重新创建标准cookie,标准cookie必须保留由源服务器发送的所有属性
BasicClientCookie stdCookie = new BasicClientCookie("name", "value");
stdCookie.setVersion(1);
stdCookie.setDomain(".mycompany.com");
stdCookie.setPath("/");
stdCookie.setSecure(true);
// 精确设置由服务器发送的属性
stdCookie.setAttribute(ClientCookie.VERSION_ATTR, "1");
stdCookie.setAttribute(ClientCookie.DOMAIN_ATTR, ".mycompany.com");
-----------
重新创建Set-Cookie2兼容cookie的实例,标准cookie必须保留由源服务器发送的所有属性
BasicClientCookie2 stdCookie = new BasicClientCookie2("name", "value");
stdCookie.setVersion(1);
stdCookie.setDomain(".mycompany.com");
stdCookie.setPorts(new int[] {80,8080});
stdCookie.setPath("/");
stdCookie.setSecure(true);
// 精确设置由服务器发送的属性
stdCookie.setAttribute(ClientCookie.VERSION_ATTR, "1");
stdCookie.setAttribute(ClientCookie.DOMAIN_ATTR, ".mycompany.com");
stdCookie.setAttribute(ClientCookie.PORT_ATTR, "80,8080");
cookie规范
CookieSpec接口代表了cookie管理的规范。
*) 解析Set-Cookie规则还有可选的Set-Cookie2头部信息
*) 验证解析cookie的规则
*) 格式化给定主机的Cookie头部信息,原始端口和路径
httpclient附带一些cookieSpec的实现
网景公司草案:这个规范符合由网景通讯发布的原始草案规范。应当避免,除非有绝对的必要去兼容遗留代码。
RFC2109:官方HTTP状态管理规范并取代的老版本,被RFC 2965取代。
RFC2965:官方HTTP状态管理规范。
浏览器兼容性:这个实现努力去密切模仿(mis)通用Web浏览器应用程序的实现。比如微软的Internet Explorer和Mozilla的FireFox浏览器。
最佳匹配:'Meta'(元)cookie规范采用了一些基于又HTTP响应发送的cookie格式的cookie策略。它基本上聚合了以上所有的实现到以一个类中。
建议使用best match策略,让httpclient在运行时基于执行上下文采用一些合适的兼容等级
cookie规范注册表
httpclient使用CookieSpecRegistry类维护一个可用的cookie规范注册表。
兼容性:浏览器兼容性(宽松策略)。
网景:网景公司草案。
rfc2109:RFC 2109(过时的严格策略)。
rfc2965:RFC 2965(严格策略的标准符合)。
best-match:最佳匹配meta(元)策略。
选择cookie策略
cookie策略可以在http客户端被设置,如果需要,在http请求级重写.
HttpClient httpclient = new DefaultHttpClient();
//对每个默认的强制严格cookie策略
httpclient.getParams().setPatameter(ClientPNames.COOKIE_POLICY,CookiePolicy,RFC_2965);
HttpGet httpget=new HttpGet("http://www.broken-server.com/");
//对这个请求覆盖默认策略
httpget.getParams().setParameter(ClientPNames.COOKIE_POLICY,CookiePolicy.BROWSER_COMPABILITY);
定制cookie策略
实现定制(自定义)cookie策略,我们应该创建CookieSpec接口的定制实现类
创建一个CookieSpecFactory实现来创建和初始化定制实现的实例并使用HttpClient注册这个工厂
CookieSpecFactory csf = new CookieSpecFactory(){
public CookieSpec newInstance(HttpParams params){
return new BrowserCompatSpec(){
@Override
public void validate(Cookie cookie,CookieOrigin origin) throws MalformedCookieException{
//......
}
};
}
};
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getCookieSpecs().reginster("easy",csf);
httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY,"easy");
cookie持久化
DefaultHttpClient httpClient = new DefaultHttpClient();
//创建一个本地cookie store实例
CookieStore cookieStore = new BasicCookieStore();
//如果需要填充cookie
BasicClientCookie cookie = new BasicClientCookie("name","value");
cookie.setVersion(0);
cookie.setDomain("127.0.0.1");
cookie.setPath("/");
cookieStore.addCookie(cookie);
//设置存储
httpclient.setCookieStore(cookieStore);
http状态管理和执行上下文
在http请求执行的过程中,httpclient添加了下列和状态管理相关的对象到执行上下文中
'http.cookiespec-registry':CookieSpecRegistry实例代表了实际的cookie规范注册表。这个属性的值设置在本地内容中,优先于默认的。
'http.cookie-spec':CookieSpec实例代表真实的cookie规范。
'http.cookie-origin':CookieOrigin实例代表了真实的源服务器的详细信息。
'http.cookie-store':CookieStore实例代表了真实的cookie存储。设置在本地内容中的这个属性的值优先于默认的。
本地的HttpContext对象可以被用来定制http状态管理内容,先于请求执行或者请求执行之后检查他的状态
HttpClient httpclient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpget = new HttpGet("http://localhost:8080/");
HttpResponse response = httpclient.execute(httpget, localContext);
CookieOrigin cookieOrigin = (CookieOrigin) localContext.getAttribute(ClientContext.COOKIE_ORIGIN);
System.out.println("Cookie origin: " + cookieOrigin);
CookieSpec cookieSpec = (CookieSpec) localContext.getAttribute(ClientContext.COOKIE_SPEC);
System.out.println("Cookie spec used: " + cookieSpec);
每个用户/线程的状态管理
HttpClient httpclient = new DefaultHttpClient();
//创建cookie store的本地实例
CookieStore cookieStore = new BasicCookieStore();
//创建本地的http内容
HttpContext content = new BasicHttpContext();
//绑定定制cookie store到本地内容中
content.setAttribute(ClientContext.COOKIE_STORE,cookieStore);
HttpGet httpget = new HttpGet("http://www.baidu.com");
//作为参数传递本地内容
HttpResponse response = httpclient.execute(httpget,content);
httpclient cookie相关介绍的更多相关文章
- Android HttpClient HttpURLConnection相关介绍
Android HttpClient HttpURLConnection相关介绍 遇到一个问题 在android studio上用HttpClient编写网络访问代码的时候,发现该类无法导入并使用.. ...
- httpclient cookie使用介绍
COOKIE的处理 session的保持是通过cookie来维持的,所以如果用户有勾选X天免登陆,这个session就X天内一直有效,就是通过这个cookie来维持. 如果没有选中x天免登陆,基本上就 ...
- 2.19 cookie相关操作
2.19 cookie相关操作 前言虽然cookie相关操作在平常ui自动化中用得少,偶尔也会用到,比如登录有图形验证码,可以通过绕过验证码方式,添加cookie方法登录.登录后换账号登录时候,也可作 ...
- ppDelegate的相关介绍
// AppDelegate的相关介绍// IOS笔记 //@interface AppDelegate : UIResponder <UIApplicationDelegate>// ...
- 【个人笔记】002-PHP基础-01-PHP快速入门-02-PHP语言相关介绍输
002-PHP基础-01-PHP快速入门 02-PHP语言相关介绍 1.PHP是什么 Hypertext Preprocessor超文本预处理器 是一种通用开源脚本语言 Personal Home P ...
- android6.0SDK 删除HttpClient的相关类的解决方法
本文转载自博客:http://blog.csdn.net/yangqingqo/article/details/48214865 android6.0SDK中删除HttpClient的相关类的解决方法 ...
- JMeter 配置元件之HTTP Cookie Manager 介绍
配置元件之HTTP Cookie Manager 介绍 by:授客 QQ:1033553122 测试环境 apache-jmeter-2.13 1. Cookie管理器介绍 Cookie Ma ...
- Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解
前言 大家好,给大家带来Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解的概述,希望你们喜欢 Activity是什么 作为一个Activ ...
- CSS3 Backgrounds相关介绍
CSS3 Backgrounds相关介绍 1.背景图片(background images)是在padding-box的左上角落脚安家的,我们可以使用background-position属性改变默认 ...
随机推荐
- 20135234mqy-——信息安全系统设计基础第十一周学习总结
第八章 异常控制流 8.1异常 异常是异常控制流的一种形式,它一部分是由硬件实现的,一部分是由操作系统实现的. 异常就是控制流中的突变,用来响应处理器状态中的某些变化. 8.1.1异常处理 异常号是到 ...
- Python跨平台打包
对于pyinstaller,可以完成在windows,linux,和mac下的python脚本编译,生成exe,elf,.app文件: 1.使用方法: 在pyinstaller的官网上下载,一般是源码 ...
- windows的gvim总是报错: +iconv fencview.vim
iconv是用来转换gvim文件的编码的, 需要插件: iconv.dll gvim7.3的文件目录结构: vim/vim73是它的核心文件, 而vimfiles是扩展文件, 里面的plugin是专门 ...
- centos7下yum升级被PackageKit锁定
新安装centos7后,第一次升级出现下面的错误: Another app is currently holding the yum lock; waiting for it to exit... 另 ...
- NS3 Ptr<Rocket> 与 TcpRocket 的一个小问题
前因:ns3网络仿真 实验进行到很关键的一步,我尝试进行了代码的编写(还没有添加Traceback的函数),如下: #include "ns3/core-module.h" #in ...
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks论文理解
一.创新点和解决的问题 创新点 设计Region Proposal Networks[RPN],利用CNN卷积操作后的特征图生成region proposals,代替了Selective Search ...
- select 操作
一:JavaScript 1:拿到select对象: var myselect=document.getElementById(“test”); 2:拿到选中项的索引:var index=mysele ...
- android适配各种分辨率的问题
Android设备屏幕的尺寸是各式各样的,如小米是4英寸的,Xoom平板是10英寸:分辨率也千奇百怪,800×480,960×540等:Android版本的碎片化问题更是萦绕于心,不过在设计应用时可以 ...
- w3c标准 dom对象 事件冒泡和事件捕获
http://www.cnblogs.com/chengxs/p/6388779.html http://www.jb51.net/article/42492.htm W3C标准是什么? 1.表现(c ...
- 最大容积 Container With Most Water
2018-07-31 17:28:42 问题描述: 问题求解: 很容易想到的是Brute Force,也就是枚举所有可能的pairs,这种解法的时间复杂度为O(n ^ 2),由于本题的数据规模较大,会 ...