HttpClient Cookies

简介

HttpClient支持自动管理Cookies,允许服务端设定Cookies,并在请求时自动返回客户端的Cookies信息。客户端也可以手动的设置Cookies发送到服务端。

不幸的是,同一时间内有太多的Cookies标准: Netscape Cookie, RFC2109, RFC2965 以及大量供应商不符合规范的自定义Cookies标准。针对此,HttpClient提供Cookies管理策略驱动。这篇文章意在阐述怎么样去使用不同标准的Cookies以及如何解决在使用Cookies和HttpClient时一些共同的问题。

支持的规格

以下Cookies标准,HttpClient3.1可以支持。

RFC2109

RFC2109是W3C组织第一次推出的官方Cookies标准。理论上,所有使用版本1 Cookies的服务端都应该使用此标准。HttpClient已经将此标准设定为默认。

遗憾的是,许多服务端不正确的实现了标准或者仍然使用Netscape标准。所以有时感到此标准太过于严格。

RFC2109是HttpClient使用的默认Cookies协议。

RFC2965

RFC2965定义了版本2并且尝试去弥补在版本1中Cookie的RFC2109标准的缺点。RFC2965规定RFC2965最终取代RFC2109.

发送RFC2965标准Cookies的服务端,将会使用Set-Cookie2 header添加到Set-Cookie Header信息中,RFC2965 Cookies是区分端口的。

Netscape标准

Netscape是最原始的Cookies规范,同时也是RFC2109的基础。尽管如此,还是在很多重要的方面与RFC2109不同,可能需要特定服务器才可以兼容。

Browser Compatibility

这种兼容性设计要求是适应尽可能多的不同的服务器,尽管不是完全按照标准来实现的。如果你遇到了解析Cookies的问题,你就可能要用到这一个规范。

有太多的web站点是用CGI脚本去实现的,而导致只有将所有的Cookies都放入Request header才可以正常的工作。这种情况下最好设置http.protocol.single-cookie-header参数为true。

httpclient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
// httpclient.getParams().setParameter("http.protocol.single-cookie-header", true);
httpclient.getParams().setParameter(HttpMethodParams.SINGLE_COOKIE_HEADER, true);

Ignore Cookies

此规格忽略所有Cookie 。被用来防止HttpClient接受和发送的Cookie。

Spacifying the Specification

有俩中方式去规定使用哪种Cookies规范,每个HttpMethod实例都有HttpMethodParams,他的policy值必须使用方法CookiePolicy.registerCookieSpec()来注册。

HttpMethod method = new GetMethod();

Method.getParams().setCookiePolicy(CookiePolicy.RFC_2109);

手动处理Cookies

HttpClient的Cookie管理API可以手动处理Cookie。可以手动设置Requset的Cookie headers或是处理Response的Set-Cookie的headers或是用自动Cookie管理去代替。

HttpMethod method = new GetMethod();

Method.getParams().setCookiePolicy(CookiePolicy.IGNORE_COOKIES);

Method.setRequestHeader(“Cookie”, “special_cookie=value”);

HttpClient Cookies设置相关推荐

  1. php弹窗24小时一次,JS利用cookies设置每隔24小时弹出框

    废话不多说了,直接给大家贴代码了,具体代码如下所示: function cookieGO(name) { var today = new Date(); var expires = new Date( ...

  2. HttpClient settimeout 设置

    2019独角兽企业重金招聘Python工程师标准>>> HttpClient 4 和 HttpClient 3 设置超时 HttpClient 4: 连接超时: httpclient ...

  3. .NetCore HttpClient Proxy 设置全局代理

    .NetCore HttpClient Proxy 设置全局代理 环境 .net6.0,使用的是 HttpClient 在Program.cs里面 service.AddHttpClient<H ...

  4. HttpClient 如何设置请求接口等待时间

    我们在请求接口的时候容易出现请求超时的现象,出现这一问题的原因可能是接口确实挂了,也可能是接口还没有来的及响应,我们程序里面已经出现了请求超时的现象 问题描述: 通常会出现以下的报错: java.ne ...

  5. HttpClient 如何设置超时时间

    今天分享一个巨坑,就是 HttpClient.这玩意有多坑呢?就是每个版本都变,近日笔者深受其害. 先看一下代码,我要发送请求调用一个c++接口. public static String doPos ...

  6. 我又踩坑了!如何为HttpClient请求设置Content-Type标头?

    最近在重构认证代码,认证过程相当常规: POST /open-api/v1/user-info?client_id&timstamp&rd=12345&sign=***& ...

  7. HttpClient库设置超时

    HttpClient库API跟Lucene一样,每个版本的API都变化很大,这有点让人头疼.就好比创建一个HttpClient对象吧,每一个版本的都不一样. 3.X是正常的Java语法 HttpCli ...

  8. 我又踩坑了!如何为 HttpClient 请求设置 Content-Type 标头?

    作者 | 小码甲 来源 | Dotnet Plus(ID:nodotnet) 头图 |  CSDN 下载自东方IC 最近在重构认证代码,认证过程相当常规: POST /open-api/v1/user ...

  9. HttpClient 设置cookie的问题

    httpclient的的版本: <dependency><groupId>org.apache.httpcomponents</groupId><artifa ...

最新文章

  1. awk,sed,cut获取最后一列数据
  2. SHADER 用 step替代 if-else
  3. 【TensorFlow-windows】学习笔记五——自编码器
  4. 基于VMware Workstation创建虚拟机,以Ubuntu16.04为例
  5. Spark源码打包编译的过程
  6. cordova开发日记04 常用插件与使用(更新2016-05-19)
  7. linux数据软件,Linux数据安全工具:数据镜像软件DRBD的管理与维护
  8. 5G与IoT将成为IPv6强大驱动力
  9. objective-c和java哪个简单_Objective-C和Java的简单对比
  10. mysql 使用存储过程批量插数据
  11. 花生壳 Linux arm
  12. python中除法带小数点_python 除法保留两位小数点的方法
  13. python 因子分析 权重计算_Python与量化多因子——因子权重优化
  14. ADO连接MySql数据库之通过连接字符串
  15. 第3章 从零开始的计算机系统
  16. dreamweaver cs6 的破解方法
  17. KY-RTI分布仿真技术:第八章 Visual C#程序设计
  18. 瞬态抑制二极管与稳压二极管的区别
  19. 机械专业中的计算机应用系统,计算机技术在机械制造领域的应用
  20. linux最大文件名,linux和windows文件名长度限制

热门文章

  1. 【由浅入深学Python】Python 保留字
  2. 未来计算机会是什么样子的呢,未来的电脑会是什么样?
  3. 系统崩溃后 我这样拯救我的硬盘数据
  4. 2017/11/28车辆限号日期查询
  5. 关于 SAP AMDP 调用错误消息 client-specific and restricts access to a client
  6. js 死循环代码debug
  7. 用牛顿迭代法求方程的根matlab,牛顿迭代法求方程解 程序如下
  8. 平衡自己身体的酸碱性
  9. c语言文件操作获取文件位置,C语言文件操作:获取文件内容
  10. swing:一种工业界广泛使用的召回算法