相关疑难解决方法(0)

使用JavaFX的WebEngine/WebView设置cookie

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

这个页面上的任何问题似乎都没有触及这个问题 - 有这个,但它只是在applet中修复bug时禁用cookie ,我的应用程序在桌面上btw.

我想象的唯一方法是通过请求第一页(需要带有sessionID的cookie才能正确加载),获取"拒绝访问"风格的消息,在页面上下文中执行一些javascript来设置cookie和然后刷新.这个解决方案虽然是一个糟糕的用户体验.

如何使用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();
Run Code Online (Sandbox Code Playgroud)

现在让我们说这样做:

String url = "http://www.google.com/";
wv.getEngine.go(url);
Run Code Online (Sandbox Code Playgroud)

在发出此请求后在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]}
Run Code Online (Sandbox Code Playgroud)

太棒了

WebEngine只使用底层注册的cookie引擎!但等等,真的吗?让我们在发出请求之前尝试添加cookie ...

cookie_store.add(new URL(url).toURI(), new HttpCookie("testCookieKey", "testCookieValue"));
Run Code Online (Sandbox Code Playgroud)

然后我看看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 …
Run Code Online (Sandbox Code Playgroud)

cookies javafx httprequest http-headers javafx-2

42
推荐指数
1
解决办法
2万
查看次数

自定义 JavaFX WebView 协议处理程序

我正在尝试为使用 webview 访问单个网站的 JavaFX 应用程序编写自己的协议处理程序。到目前为止我所做的

我的自定义 URLStreamHandlerFactory

public class MyURLStreamHandlerFactory implements URLStreamHandlerFactory {

    public URLStreamHandler createURLStreamHandler(String protocol) {
        System.out.println("Protocol: " + protocol);
        if (protocol.equalsIgnoreCase("http") || protocol.equalsIgnoreCase("https")) {
           return new MyURLStreamHandler();
        } else {
            return new URLStreamHandler() {
                @Override
               protected URLConnection openConnection(URL u) throws IOException {
                    return new URLConnection(u) {
                        @Override
                        public void connect() throws IOException {
                        }
                    };
                }
            };
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

我的自定义 URLStreamHandler

public class MyURLStreamHandler extends java.net.URLStreamHandler{

    protected HttpURLConnection openConnection(URL u){
        MyURLConnection q = new MyURLConnection(u);
        return …
Run Code Online (Sandbox Code Playgroud)

javafx urlconnection webview

4
推荐指数
1
解决办法
6281
查看次数