我正在尝试使用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和我的计算机上运行时会发生这种情况。
以前有没有人见过这种错误? 如何更改默认端口? 有没有解决方法?
答案 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);
它只是奇迹般的工作。欢呼声。