URLСоединение с файлами cookie?

Я пытаюсь создать URLConnection, который поддерживает файлы cookie. Согласно документации я могу использовать:

CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);

Я не смог заставить этот код работать, потом увидел, что он работает только для API 9 (2.3). Однако я не получаю сообщения об ошибке при использовании CookieManager в старом эмуляторе, CookieManager существует, но не может быть создан. Есть ли способ заставить это работать для более ранних версий? Я старался:

            cookieManager.setAcceptCookie(true);
            URLConnection con = u.openConnection();

            con.setRequestProperty("Cookie", cookieManager.getInstance().getCookie(url););
            con.setDoOutput(true);
            con.connect();
            String addCookie = con.getHeaderField("Set-Cookie");
            System.out.println(con.getHeaderFields().toString());
            if (addCookie!=null) {
                cookieManager.getInstance().setCookie(url, addCookie);
            }

но это не работает.


person NoBugs    schedule 15.06.2011    source источник
comment
Вы клиент или сервер в этом случае? Если вы клиент, почему вы используете заголовок Set-Cookie?   -  person Vineet Reynolds    schedule 15.06.2011
comment
Этот клиент читает это, оно отправлено сервером. curl.haxx.se/rfc/cookie_spec.html   -  person NoBugs    schedule 15.06.2011
comment
о, чувак, ты спас мне жизнь... не ответ, а твой вопрос... большое спасибо   -  person iAmLearning    schedule 10.01.2014
comment
@SushilKumar Что ты имеешь в виду?   -  person NoBugs    schedule 11.01.2014


Ответы (1)


Я смог включить файлы cookie с помощью класса CookieManager Яна Брауна: http://www.hccp.org/java-net-cookie-how-to.html

Я переименовал его в IansCookieManager, установил переменную класса _CM = new IansCookieManager, теперь все просто:

            URLConnection conn = u.openConnection();
            _CM.setCookies(conn);
            conn.connect();
            _CM.storeCookies(conn);
            ... 
person NoBugs    schedule 15.06.2011
comment
Это довольно хороший и простой менеджер файлов cookie. Мне это нравится. Я также нахожу странным, что инженерам Android потребовалось так много времени, чтобы включить класс java.net.CookieManager. В любом случае, я считаю, что оба класса (Ian и java.net) хранят файлы cookie только временно (т.е. они будут храниться только до тех пор, пока процесс приложения не будет убит). Так что вполне возможно, что в следующий раз, когда пользователь запустит приложение, ему нужно будет снова войти в систему и т. д.? - person Tony Chan; 02.08.2012
comment
Правда, если вы не сериализовали класс и не сохранили его где-нибудь. Кроме того, выхода и возврата в приложение недостаточно для «выхода» из приложения, поэтому файлы cookie и сеанс браузера должны быть сохранены. - person NoBugs; 02.08.2012
comment
Правильно, пользователю придется делать некоторые вещи, интенсивно использующие память, чтобы заставить систему завершить процесс приложения. Сериализация класса управления файлами cookie — хорошая идея. Вероятно, лучше всего записать его во внутреннюю память, используя openFileOutput()? Прямо сейчас я использую очень простой метод, при котором я сохраняю только один файл cookie сеанса, который возвращается мне как String в SharedPreferences. Я думаю, что сейчас попробую использовать этот сериализуемый менеджер файлов cookie. - person Tony Chan; 03.08.2012