我想使用JSoup下载页面内容。如果整个操作(打开连接+读取)超过8秒,我希望立即中止。我认为
根据javadoc的说明:
有时候会在一分钟以上后(尽管很少)失败(SocketTimeoutException)。
有人遇到过这种问题吗?
timeout(int millis)
方法的目的正是如此。根据javadoc的说明:
我编写了一个简单的代码来模拟该操作:设置请求超时时间(连接和读取)。如果超时,将抛出IOException。默认超时时间为3秒(3000毫秒)。超时时间为零被视为无限超时。
final int TIME_OUT = 8000;
final String USER_AGENT_STRING = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)";
final String url = "http://reguler-pmb-tanggamus.va.web.id/";
long time = System.currentTimeMillis();
try {
Document doc = Jsoup.connect(url).userAgent(USER_AGENT_STRING).timeout(TIME_OUT).get();
System.out.println("Done crawling " + url + ", took " + (System.currentTimeMillis() - time) + " millis");
System.out.println("Content: " + doc);
} catch (Exception e) {
System.out.println("Failed after " + (System.currentTimeMillis() - time) + " millis");
e.printStackTrace();
}
我尝试在一些“有问题”的网站上运行这个小脚本,在单线程环境下。我假设无论成功还是捕获异常,操作时间都不应超过8秒(8000毫秒)。不幸的是,有时候它会在一分钟后才成功(没有异常):
Done crawling http://reguler-pmb-tanggamus.va.web.id/, took 68215 millis
Content: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> ...
有时候会在一分钟以上后(尽管很少)失败(SocketTimeoutException)。
有人遇到过这种问题吗?