2011-07-07 9 views
2

GAEのアプリでHtmlUnitを使用してGoogleにログインしようとしています。GAEとHtmlUnit 2.9 - 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クッキーの例外とポートを得た:-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(false); webClient.getOptions()。setThrowExceptionOnFailingStatusCode(true); webClient.getOptions()。setCssEnabled(false); – Splaktar

2

フェッチするURLをデフォルトのポート80に変更します。例:http://www.cnn.comhttp://www.cnn.com:80になります。クラスをオーバーライドする方法もありますが、URLを明確にすることをお勧めします。

+0

これは適切な答えです。 HTTPS接続の場合は、ポート443を使用します。 – tomrozb

関連する問題