如何解析Cookie字符串

我想要一个Cookie字符串(因为它可能会在Set-Cookie标头中返回),并且能够轻松修改其中的一部分,特别是到期日期。

我看到有几种不同的Cookie类,例如BasicClientCookie,但是我看不到任何简单的方法来将字符串解析为这些对象之一。

我在api级别9中看到他们添加了具有解析方法的HttpCookie,但是我需要在以前的版本中工作。

有任何想法吗?

谢谢

回答:

我相信您必须手动解析它。试试这个:

BasicClientCookie parseRawCookie(String rawCookie) throws Exception {

String[] rawCookieParams = rawCookie.split(";");

String[] rawCookieNameAndValue = rawCookieParams[0].split("=");

if (rawCookieNameAndValue.length != 2) {

throw new Exception("Invalid cookie: missing name and value.");

}

String cookieName = rawCookieNameAndValue[0].trim();

String cookieValue = rawCookieNameAndValue[1].trim();

BasicClientCookie cookie = new BasicClientCookie(cookieName, cookieValue);

for (int i = 1; i < rawCookieParams.length; i++) {

String rawCookieParamNameAndValue[] = rawCookieParams[i].trim().split("=");

String paramName = rawCookieParamNameAndValue[0].trim();

if (paramName.equalsIgnoreCase("secure")) {

cookie.setSecure(true);

} else {

if (rawCookieParamNameAndValue.length != 2) {

throw new Exception("Invalid cookie: attribute not a flag or missing value.");

}

String paramValue = rawCookieParamNameAndValue[1].trim();

if (paramName.equalsIgnoreCase("expires")) {

Date expiryDate = DateFormat.getDateTimeInstance(DateFormat.FULL)

.parse(paramValue);

cookie.setExpiryDate(expiryDate);

} else if (paramName.equalsIgnoreCase("max-age")) {

long maxAge = Long.parseLong(paramValue);

Date expiryDate = new Date(System.getCurrentTimeMillis() + maxAge);

cookie.setExpiryDate(expiryDate);

} else if (paramName.equalsIgnoreCase("domain")) {

cookie.setDomain(paramValue);

} else if (paramName.equalsIgnoreCase("path")) {

cookie.setPath(paramValue);

} else if (paramName.equalsIgnoreCase("comment")) {

cookie.setPath(paramValue);

} else {

throw new Exception("Invalid cookie: invalid attribute name.");

}

}

}

return cookie;

}

我尚未真正编译或运行此代码,但这应该是一个好的开始。您可能需要对日期解析进行一些调整:我不确定cookie中使用的日期格式实际上是否与相同DateFormat.FULL。(查看此相关的问题,该地址在处理Cookie中的日期格式。)另外,还要注意有一些cookie的属性没有被处理BasicClientCookie,如versionhttponly

最后,此代码假定cookie的名称和值显示为第一个属性:我不确定这是否一定是正确的,但这就是我见过的每个cookie的排序方式。

以上是 如何解析Cookie字符串 的全部内容, 来源链接: utcz.com/qa/432808.html

回到顶部