我相信您必须手动解析它。试试这个:
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,如
version和
httponly。
最后,此代码假定cookie的名称和值显示为第一个属性:我不确定这是否一定是正确的,但这就是我见过的每个cookie的排序方式。



