JavaSe:Cookie 管理的API介绍
CookieManager
在使用HttpURLConnection中,并没有关于Cookie的管理。如果使用Java程序时,怎么管理cookie呢?
Cookie案例
1. User Agent -> Server
POST /acme/login HTTP/1.1
[form data]
2. Server -> User Agent
HTTP/1.1 200 OK
Set-Cookie2: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"
3. User Agent -> Server
POST /acme/pickitem HTTP/1.1
Cookie: $Version="1"; Customer="WILE_E_COYOTE"; $Path="/acme"
[form data]
Cookie的两种形式
会话 Cookie
在使用applet、application时, Session Cookie被存储在内存中,当程序退出时,cookie会被自动的删除。Cookie中会保存session的id,这样在同一个站点的不同页面之间切换时,就不需要再重复登录。
持久化Cookie
与Session Cookie不同的是,在应用程序退出时,cookie不会被删除,直到它过期时,都会被删除。
编程方式访问Cookie
请求发送前设置Cookie
发送HTTP请求时,可以使用URLConnection.setRequestProperty(String key, String value)方式设置Cookie。
URL url = new URL( "http://java.sun.com/" );
URLConnection conn = url.openConnection();
conn.setRequestProperty("Cookie", "foo=bar");
InputStream is = conn.getInputStream();
......
接收到响应后查看Cookie
接收到响应后,可以使用URLConnection.getHeaderFields()方式来查看Cookie:
URL url = new URL( "http://java.sun.com/" );
URLConnection conn = url.openConnection();
conn.connect();
.....
Map<String, List<String>> headers = conn.getHeaderFields();
List<String> values = headers.get("Set-Cookie"); String cookieValue = null;
for (Iterator iter = values.iterator(); iter.hasNext(); ) {
String v = values.next();
if (cookieValue == null)
cookieValue = v;
else
cookieValue = cookieValue + ";" + v;
}
CookieHandler
这两个方法是常见的方法,其实还有另外的专门管理Cookie的处理:CookieHandler。
public abstract Map<String,List<String>> get(URI uri,Map<String,List<String>> requestHeaders)
throws IOException
Gets all the applicable cookies from a cookie cache for the specified uri in the request header. HTTP protocol implementers should make sure that this method is called after all request headers related to choosing cookies are added, and before the request is sent.
该方法用于从Cookie Cache(也就是CookieStore)中获取所有的可以使用的Cookie。
HTTP协议的实现应该确保这个方法在相关Cookie 请求头被设置后,在请求发送之前被调用。
从方法的说明上来看, 这个是回调函数,这个方法会在HTTPURLConnection.setRequestProperty(“Cookie”,”xxxx=yyy”)执行后,在HttpURLConnection.connect()之前被自动调用,不需要我们在代码里进行调用。
该方法的返回值是一个Map,返回值中的数据将作为请求头的一部分发送到服务器。对应于案例中的(3)过程。
与此对应的,put方法是将响应头中的Cookie设置到客户端的Cookie Cache中。
默认的服务端返回的响应头中是使用set-cookie作为要设置Cookie的标识的。
客户端(例如浏览器)接收到响应后,使用put()将要set-cache中的数据设置到客户端的Cookie Cache中。对应于案例中的(2)过程。
JavaSe:Cookie 管理的API介绍的更多相关文章
- 『动善时』JMeter基础 — 20、JMeter配置元件【HTTP Cookie管理器】详细介绍
目录 1.HTTP Cookie管理器介绍 2.HTTP Cookie管理器界面详解 3.JMeter中对Cookie的管理 (1)Cookie的存储 (2)Cookie的管理策略 4.补充:Cook ...
- Cookie API介绍
一.Java提供的操作Cookie的API Java中的javax.servlet.http.Cookie类用于创建一个Cookie Cookie类的主要方法 No. 方法 类型 描述 Cookie( ...
- jmeter cookie管理器 使用方法---新手学习记录1
首先得抓包: 我已post方法为例: POST /api/datasources/lemontest/jaql HTTP/1.1 Host: 192.168.1.107:8081 Content-Le ...
- facebook api介绍
转自(http://sls.weco.net/node/10773) 一.Facebook API 基礎概念 Facebook API 概論 : API 最大的好處在於可以讓程式開發人員只需要根據 A ...
- FastDFS api介绍
1. 命令行api介绍 FastDFS提供了可用于运维测试的命令行api,下面进行介绍: 1.1 fastdfs服务管理 tracker进程服务管理脚本 /etc/init.d/fdfs_tracke ...
- ElasticSearch的API介绍
ElasticSearch的API介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ES是基于Restful风格 1>ES是基于Restful风格 Elasticsea ...
- python 全栈开发,Day95(RESTful API介绍,基于Django实现RESTful API,DRF 序列化)
昨日内容回顾 1. rest framework serializer(序列化)的简单使用 QuerySet([ obj, obj, obj]) --> JSON格式数据 0. 安装和导入: p ...
- Spring Environment(一)API 介绍
Spring Environment(一)API 使用 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring 3. ...
- Spring PropertyResolver 占位符解析(一)API 介绍
Spring PropertyResolver 占位符解析(一)API 介绍 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html ...
随机推荐
- Hammer.js分析(四)——recognizer.js
不同识别器会使用不同逻辑,根据从相关Input类获取到的事件对象和事件,实现自定义的触屏事件,例如tap.pinch等. 一.继承关系 Recognizer与前面的Input一样,也相当于是个抽象类. ...
- 关于JavaScript预编译和执行顺序以及函数引用类型的思考
昨晚在对项目中的一部分做模块化处理的时候,遇到了一个问题,一个重新定义的function对一个通用类中的function进行赋值覆盖的时候,失败了.问题抽象出来是这样的: <script > ...
- MVC中局部视图的使用
加载部分视图 $("#result").load("/home/message",function(){ //加载完之后隐藏进度条 }); public Act ...
- android获得ImageView图片的等级
android获得ImageView图片的等级问题 要实现的功能如下图,点击分享能显示选中与不选中状态,然后发送是根据状态来实现具体分享功能. 在gridview中有5个子项,每个子元素都有两张图片A ...
- js修改不了input的值
奇怪的input 今天想做一个通过点击按钮,修改input值的控件,但是点击按钮后,input值变成修改的值后又变回了原来的值,百思不得其解,代码如下 <form> <div cla ...
- Switch to strategy
namespace RefactoringLib.SwitchToStrategy.Before { public class ClientCode { public decimal Calculat ...
- Hibernate —— Entity.hbm.xml
一.简述 1.对象关系映射文件,用于映射实体类和关系数据库数据表之间的一个 xml 文件. 2.通过 Entity.hbm.xml 映射文件,Hibernate 可以理解持久化类和数据表之间的对应关系 ...
- Nancy之区域和分部视图的使用
一.前言 在MVC中,区域(Area)和分部视图(PartialView)应该是我们用的十分频繁的两个东西 今天我们就在Nancy中,把这两个东西简单的用起来! 二.简单使用之区域 区域,无论是对 ...
- C#获得MAC地址(网卡序列号)代码
代码如下: //获得网卡序列号 //MAc地址 http://www.cnblogs.com/sosoft/ public string GetMoAddress() { string MoAddre ...
- SharePoint 列表的导出导入
有一群友问到关于 SharePoint 列表的导入与导出的问题,而最近也要做相关操作且好久没写博客了,所以记录下来,过程其实相当简单. 方法:将 列表 保存为 模板(可包含数据),下载模板文件,上传到 ...