Httpclient Cookies 处理_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Httpclient Cookies 处理

Httpclient Cookies 处理

 2013/10/8 18:30:31  jsczxy2  程序员俱乐部  我要评论(0)
  • 摘要:HttpClientCookies简介HttpClient支持自动管理Cookies,允许服务端设定Cookies,并在请求时自动返回客户端的Cookies信息。客户端也可以手动的设置Cookies发送到服务端。不幸的是,同一时间内有太多的Cookies标准:NetscapeCookie,RFC2109,RFC2965以及大量供应商不符合规范的自定义Cookies标准。针对此,HttpClient提供Cookies管理策略驱动
  • 标签:client Cookie HTTP

class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 25.1875px; background-color: #efefef; text-align: center;">HttpClient Cookies

简介

?

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

?

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

?

支持的规格

?

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

?

RFC2109

?

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

?

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

?

RFC2109HttpClient使用的默认Cookies协议

?

RFC2965

?

RFC2965定义了版本2并且尝试去弥补在版本1CookieRFC2109标准的缺点。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

?

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

?

HttpClientCookie管理API可以手动处理Cookie。可以手动设置RequsetCookie headers或是处理ResponseSet-Cookieheaders或是用自动Cookie管理去代替。

?

HttpMethod method = new GetMethod();

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

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

发表评论
用户名: 匿名