Я не могу найти какой-либо способ программным образом установить cookie, используя WebEngine/WebView в JavaFX. API не дает никаких представлений о том, как получить объект, подобный HttpRequest, для изменения заголовков (что я использую в приложении для XML-RPC) или любого менеджера файлов cookie.
Никакие вопросы на этой странице не затрагивают проблему - есть this, но она просто отключает куки, когда в апплете исправляется ошибка, мое приложение находится на рабочем столе.
Единственный способ, с помощью которого я мог бы сделать это, - это запросить первую страницу (для которой требуется, чтобы файл cookie с идентификатором sessionID загружался должным образом), получив сообщение об отказе в доступе, выполнив некоторый javascript в контексте страницы, который устанавливает печенье, а затем освежающий. Однако это решение было бы ужасным пользовательским интерфейсом.
Как установить cookie с помощью WebEngine?
Обновление: Взяв ключ из вопроса, связанного выше, я попытался найти некоторые примеры использования CookieManager и связанных API. Я нашел этот код, который затем попытался включить в мое приложение со странными результатами;
MyCookieStore cookie_store = new MyCookieStore();
CookieManager cookie_manager = new CookieManager(cookie_store, new MyCookiePolicy());
CookieHandler.setDefault(cookie_manager);
WebView wv = new WebView();
Теперь скажем, что мы делаем это:
String url = "http://www.google.com/";
wv.getEngine.go(url);
Отладка в Eclipse после того, как этот запрос был сделан, показывает, что в карте хранилища файлов cookie содержится файл cookie:
{http://www.google.com/=[NID=67=XWOQNK5VeRGEIEovNQhKsQZ5-laDaFXkzHci_uEI_UrFFkq_1d6kC-4Xg7SLSB8ZZVDjTUqJC_ot8vaVfX4ZllJ2SHEYaPnXmbq8NZVotgoQ372eU8NCIa_7X7uGl8GS, PREF=ID=6505d5000db18c8c:FF=0:TM=1358526181:LM=1358526181:S=Nzb5yzBzXiKPLk48]}
ЭТО УДИВИТЕЛЬНО
WebEngine просто использует базовый зарегистрированный движок cookie! Но подождите, правда? Давайте попробуем добавить файл cookie, прежде чем делать запрос...
cookie_store.add(new URL(url).toURI(), new HttpCookie("testCookieKey", "testCookieValue"));
Затем я смотрю запрос в Wireshark...
GET / HTTP/1.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/535.14 (KHTML, like Gecko) JavaFX/2.2 Safari/535.14
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Cache-Control: no-cache
Pragma: no-cache
Host: www.google.com
Connection: keep-alive
Нет cookie для меня: (
Что я делаю неправильно?