gpt4 book ai didi

cookies - 使用JavaFX的WebEngine/WebView设置cookie

转载 作者:行者123 更新时间:2023-12-03 07:05:10 34 4
gpt4 key购买 nike

我似乎找不到任何方法来使用 WebEngine 以编程方式设置 cookie/WebView在 JavaFX 中。 API 没有给出任何关于如何获取类似 HttpRequest 的对象来修改 header (这是我在 XML-RPC 应用程序中使用的对象)或任何类型的 cookie 管理器的想法。

此页面上似乎没有任何问题涉及该问题 - 有 this但它只是在小程序中禁用cookie来修复 bug顺便说一句,我的应用程序在桌面上。

我认为我能做到这一点的唯一方法是请求第一页(这需要带有 sessionID 的 cookie 才能正确加载),获取“拒绝访问”样式的消息,在页面上下文中执行一些 javascript cookies ,然后刷新。不过,这个解决方案将带来糟糕的用户体验。

如何使用 WebEngine 设置 cookie?

<小时/>

更新:从上面链接的问题中得到线索,我尝试挖掘一些使用 CookieManager 的示例。以及相关的API。 I found this code ,然后我尝试将其合并到我的应用程序中,但结果很奇怪;

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

我没有 cookies :(

我做错了什么?

最佳答案

在 Oracle 的 Vasiliy Baranov 的帮助下,我成功解决了这个问题。瓦西里写信给我:

Try putting the cookie into java.net.CookieHandler.getDefault() after the WebView is instantiated for the first time and before the call to WebEngine.load, e.g. as follows:

WebView webView = new WebView();
URI uri = URI.create("http://mysite.com");
Map<String, List<String>> headers = new LinkedHashMap<String, List<String>>();
headers.put("Set-Cookie", Arrays.asList("name=value"));
java.net.CookieHandler.getDefault().put(uri, headers);
webView.getEngine().load("http://mysite.com");

这会将 cookie 永久放入存储中,它应该在每个后续请求中发送出去(假设服务器不会取消设置它)。

Vasiliy 还解释说,WebView 将安装它自己的 CookieHandler 实现,同时保留放入默认 cookie 的 cookie。

最后,他提到了一些非常有趣的事情:

Do not waste your time trying to use java.net.CookieManager, and java.net.CookieStore. They are likely to cause problems with many sites because they implement the wrong standard.

在此之后我尝试用谷歌搜索,但这似乎不是常识。如果有人能够提供更多详细信息,我将不胜感激。这看起来很奇怪,因为看起来 CookieStoreCookieManager 被很多软件使用。

关于cookies - 使用JavaFX的WebEngine/WebView设置cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14385233/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com