2011-07-07 71 views
2

我試圖登錄在GAE的應用程序中使用到的HtmlUnit谷歌。 不過,我不斷收到此錯誤:GAE和2.9的HtmlUnit - 讓異常時jsxGet_cookie

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,在我的計算機上運行時,會發生這種情況。

有沒有人見過這種類型的錯誤過嗎? 如何更改默認端口? 是否有任何解決方法?

+0

我們應該如何看到自己的實際代碼? –

回答

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); 

而且它只是miracusly工作。乾杯。

+0

您需要在最新版本的HtmlUnit中使用新的getOptions()方法。希望這可以幫助某人,因爲我在閱讀完本文後遇到了這個問題。 。webClient.getOptions()setThrowExceptionOnScriptError(假); webClient.getOptions()。setThrowExceptionOnFailingStatusCode(true); webClient.getOptions()。setCssEnabled(false); – Splaktar

2

更改要提取的URL以包含默認端口80.示例:http://www.cnn.com變爲http://www.cnn.com:80。還有一個涉及覆蓋類的解決方法,但我更願意澄清URL。

+0

這是正確的答案。對於HTTPS連接使用端口443。 – tomrozb