我已经使用了htmlunit一段时间了。现在我试图为它引入一个超时功能 它的工作方式如下:
WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_8);
//To disable throwing exception for script errors
webClient.setThrowExceptionOnScriptError(false);
//To disable java scripts
webClient.setJavaScriptEnabled(false);
//To disable the loading of CSS
webClient.setCssEnabled(false);
int timeout = 300;
// Add timeout for ETA
webClient.setTimeout(timeout);
try{
webClient.setUseInsecureSSL(true);
}catch(GeneralSecurityException e){
log.info("General Security Exception occured");
log.error("",e);
}
HtmlPage loginPage = (HtmlPage) webClient.getPage("myurl");
如果我减少超时,它会抛出ConnectionTimeOutException
。
但现在,如果我更改设置setTimeout
和setUseInsecureSSL
的顺序,则无效。我想说的是下面的代码不会让我连接超时。
WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_8);
//To disable throwing exception for script errors
webClient.setThrowExceptionOnScriptError(false);
//To disable java scripts
webClient.setJavaScriptEnabled(false);
//To disable the loading of CSS
webClient.setCssEnabled(false);
try{
webClient.setUseInsecureSSL(true);
}catch(GeneralSecurityException e){
log.info("General Security Exception occured");
log.error("",e);
}
//Setting it after setting "setUseInsecureSSL"
int timeout = 300;
// Add timeout for ETA
webClient.setTimeout(timeout);
任何人都可以解释这个原因吗? 设置财产的顺序是否重要?
答案 0 :(得分:2)
有了这些问题,人们应该总是指定软件的哪个版本,在这种情况下,他们正在使用的图书馆,或者问题可能变得毫无意义......而不是浪费他的时间来谴责人(“以个人经验为后盾”)臭名昭着的蜥蜴,龙或他的名字应强制执行的任何东西(“提供细节”)。话虽这么说,我确认HTMLUnit 2.7到2.9至少使用如上所示的第二个非工作示例的代码安排不会抛出任何与连接超时相关的异常(“回答问题”)。现在,我将使用HTMLUnit在我们的大规模程序中反转2个候选行,并在此回复您(“分享您的研究”),但不过来自该库深处的人的解释将被理解为什么这样的现象会发生在地球上! A.R。
答案 1 :(得分:0)
我很惊讶你在这个地方尝试使用try catch,因为你的尝试和捕获将永远不会工作。
您只是初始化您的webclient并设置功能,删除try catch语句并在调用.getPage时使用它们。
如果您要定位某些非静态页面,则300 ms也非常短。根据您的需要在下面进行更改,并在调用.getPage
之前使用try catch WebClient webClient = new WebClient();
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setRedirectEnabled(true);
webClient.getOptions().setJavaScriptEnabled(false);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getCookieManager().setCookiesEnabled(false);
webClient.getOptions().setTimeout(8000);
webClient.getOptions().setDownloadImages(false);
webClient.getOptions().setGeolocationEnabled(false);
webClient.getOptions().setAppletEnabled(false);