JavaFXでWebEngine / WebViewを使用してプログラムでCookieを設定する方法が見つからないようです。APIは、ヘッダー(XML-RPCのアプリで使用するもの)を変更するためにHttpRequestのようなオブジェクトを取得する方法や、あらゆる種類のCookieマネージャーについては何も示していません。
このページの質問もこの問題に触れていないようです-これはありますが、アプレットでバグを修正するときにCookieを無効にするだけで、私のアプリはデスクトップにあります。
私がそれを行うことができる唯一の方法は、最初のページを要求し(適切にロードするには、sessionIDを持つCookieが必要です)、「アクセス拒否」スタイルのメッセージを取得し、Cookieを設定するページコンテキストでJavaScriptを実行することです。その後、さわやか。ただし、このソリューションは恐ろしいユーザーエクスペリエンスになります。
WebEngineを使用してCookieを設定するにはどうすればよいですか?
更新:上記のリンク先の質問から手がかりを得て、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
私にはクッキーはありません:(
私は何が間違っているのですか?