我正在使用 HtmlUnit 登录网站。尽管设置了连接超时和 Javascript 超时,但脚本在尝试登录站点时仍会挂起。本站为内部网页,不对外开放。
以下是我正在使用的 webClient 配置:
RefreshHandler rh = new RefreshHandler()
{
public void handleRefresh( final Page page, final URL url, final int seconds )
{
}
};
webClient.setRefreshHandler(rh);
webClient.getOptions().setTimeout(90000); //Set Connection Timeout to 1.5 minute
webClient.setJavaScriptTimeout(45000); //Set JavaScript Timeout to 0.75 minute
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getCookieManager().setCookiesEnabled(true);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setPrintContentOnFailingStatusCode(false);
webClient.getOptions().setRedirectEnabled(true);
System.setProperty("https.protocols", "SSLv3,SSLv2Hello");
注意:我使用的是 IBM Jdk 1.7和HtmlUnit 2.12(最新的)。我在项目的构建路径中包含了所有 21 个依赖项 jar。它不使用任何日志记录机制。它使用 println 语句在控制台上打印出所有内容。
我试图弄清楚以下几点:
为什么脚本挂起并且没有超时?我在这个论坛上研究过这个问题。我知道人们遇到了它,但还没有找到任何具体的解决方案。sourceforge 上也没有任何内容表明 HtmlUnit 中存在“开放”错误。
有没有办法确保脚本永远不会挂起?我认为设置上面的两个超时就可以了。除了网络/连接问题和无响应的 JavaScript 之外,还有什么其他原因会使脚本永远等待?
我知道 HtmlUnit 使用 Apache HttpClient 来进行 http 调用。我想在不从源代码构建的情况下调试这个问题(我想把它作为我的最后一个选择,因为我对 java 还很陌生)。有没有办法在调试/详细模式下运行 Htmlunit/HttpClient 以便将所有内容打印到控制台上。HtmUnit API 支持这个吗?
我使用了下面给出的所有 3 个,但似乎都不起作用:
System.getProperties().put("org.apache.commons.logging.simplelog.defaultlog", "debug");
java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.All);
java.util.logging.Logger.getLogger("org.apache.http").setLevel(Level.All);
第一个是在 HtmlUnit 主页的“日志记录”部分中指定的。
感谢您的帮助/意见。谢谢