Довольно забавно, но класс java.net.HttpCookie
не может анализировать строки cookie с доменом и / или частями пути, которые этот точный класс java.net.HttpCookie
преобразовал в строки.
Например:
HttpCookie newCookie = new HttpCookie("cookieName", "cookieValue");
newCookie.setDomain("cookieDomain.com");
newCookie.setPath("/");
Поскольку этот класс не реализует ни Serializable, ни Parcelable, заманчиво хранить файлы cookie в виде строк.Таким образом, вы пишете что-то вроде:
saveMyCookieAsString(newCookie.toString());
Этот оператор сохранит куки в следующем формате:
cookieName="cookieValue";$Path="/";$Domain="cookiedomain.com"
И затем вы захотите восстановить этот куки, так что вы получите строку:
String cookieAsString = restoreMyCookieString();
и попробуйте разобрать его:
List<HttpCookie> cookiesList = HttpCookie.parse(cookieAsString);
StringBuilder myCookieAsStringNow = new StringBuilder();
for(HttpCookie httpCookie: cookiesList) {
myCookieAsStringNow.append(httpCookie.toString());
}
сейчас myCookieAsStringNow.toString();
производит
cookieName=cookieValue
Доменные и пути части просто ушла .Причина: метод parse чувствителен к регистру таких слов, как «домен» и «путь».Возможный обходной путь: предоставьте другой метод toString (), например:
public static String httpCookieToString(HttpCookie httpCookie) {
StringBuilder result = new StringBuilder()
.append(httpCookie.getName())
.append("=")
.append("\"")
.append(httpCookie.getValue())
.append("\"");
if(!TextUtils.isEmpty(httpCookie.getDomain())) {
result.append("; domain=")
.append(httpCookie.getDomain());
}
if(!TextUtils.isEmpty(httpCookie.getPath())){
result.append("; path=")
.append(httpCookie.getPath());
}
return result.toString();
}
Я нахожу это забавным (особенно для классов типа java.net.HttpCookie
, которые предназначены для использования многими и многими людьми), и я надеюсь,это будет кому-то полезно.