GAE和HtmlUnit 2.9 - 在jsxGet_cookie上获得异常

时间:2011-07-07 23:00:08

标签: google-app-engine htmlunit

我正在尝试使用GAE中的应用程序中的HtmlUnit登录谷歌。 但是,我一直收到这个错误:

Exception invoking jsxGet_cookie

这是因为

Caused by: java.lang.IllegalArgumentException: Invalid port: -1
    at org.apache.http.cookie.CookieOrigin.<init>(CookieOrigin.java:58)
    at com.gargoylesoftware.htmlunit.CookieManager.getCookies(CookieManager.java:127)
    at com.gargoylesoftware.htmlunit.javascript.host.html.HTMLDocument.jsxGet_cookie(HTMLDocument.java:638)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:100)
    at net.sourceforge.htmlunit.corejs.javascript.MemberBox.invoke(MemberBox.java:172)
    ... 94 more

在GAE和我的计算机上运行时会发生这种情况。

以前有没有人见过这种错误? 如何更改默认端口? 有没有解决方法?

2 个答案:

答案 0 :(得分:2)

更改您要提取的网址以包含默认端口80.示例:http://www.cnn.com变为http://www.cnn.com:80。还有一个涉及重写类的解决方法,但我更喜欢澄清URL。

答案 1 :(得分:1)

我一开始遇到这个问题(我有一个GWT + GAE应用程序),我使用这个非常简单的代码,我得到了js cookie异常和端口:-1异常

    WebClient webClient = Holder.get();
    HtmlPage page=null;

    try {
        page = webClient.getPage(url);
        System.out.println("CRAWLER DONE");
    } catch (FailingHttpStatusCodeException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

     // appengine hack because it's single threaded


    String pageContent = page.asXml();
    webClient.closeAllWindows();
    return pageContent;

然后我尝试了以下内容,

    webClient.setCssEnabled(false);
    webClient.setThrowExceptionOnFailingStatusCode(false);
    webClient.setThrowExceptionOnScriptError(false);

它只是奇迹般的工作。欢呼声。