【问题标题】:How to convert Apache cookies back to String?如何将 Apache cookie 转换回字符串?
【发布时间】:2016-12-23 18:34:03
【问题描述】:

这是我的代码:

 List<Cookie> cookies = httpClient.getCookieStore().getCookies();

显然,我可以循环cookies 列表并生成它们的字符串表示。

但是,我想知道是否可以直接使用 Apache HttpClient API 来完成。

所以如果cookies包含以下cookie:[foo=123, bar=123],我如何使用HttpClient API生成下面的字符串:

"foo=123; bar=123"

该方法应该处理域、路径、过期等

HttpClient 4.1.1

【问题讨论】:

  • 一定是HC这么老的版本吗?
  • @oleg 对于我当前的用例,我无法升级到 HC 4.3+。

标签: java cookies apache-httpclient-4.x apache-commons-httpclient


【解决方案1】:

HttpClient 4.1

BasicClientCookie cookie1 = new BasicClientCookie("foo", "123");
cookie1.setVersion(0);
cookie1.setDomain("origin.com");
cookie1.setPath("/");
BasicClientCookie cookie2 = new BasicClientCookie("bar", "123");
cookie1.setVersion(0);
cookie1.setDomain("origin.com");
cookie1.setPath("/");

BasicCookieStore cookieStore = new BasicCookieStore();
cookieStore.addCookie(cookie1);
cookieStore.addCookie(cookie2);

NetscapeDraftSpec spec = new NetscapeDraftSpec();
List<Header> headers = spec.formatCookies(cookieStore.getCookies());
for (Header header: headers) {
    System.out.println(header);
}

HttpClient 4.5

BasicClientCookie cookie1 = new BasicClientCookie("foo", "123");
cookie1.setVersion(0);
cookie1.setDomain("origin.com");
cookie1.setPath("/");
BasicClientCookie cookie2 = new BasicClientCookie("bar", "123");
cookie1.setVersion(0);
cookie1.setDomain("origin.com");
cookie1.setPath("/");

BasicCookieStore cookieStore = new BasicCookieStore();
cookieStore.addCookie(cookie2);
cookieStore.addCookie(cookie1);

RFC6265StrictSpec spec = new RFC6265StrictSpec();
List<Header> headers = spec.formatCookies(cookieStore.getCookies());
for (Header header: headers) {
    System.out.println(header);
}

【讨论】:

  • 只是为了我的好奇,您可以添加HC 4.3+的代码吗?
  • 不会有太大的不同。但是,从 HC 4.5 开始,我建议使用符合 RFC 6265 的 cookie 规范而不是旧版的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 2011-08-12
相关资源
最近更新 更多