【发布时间】:2015-12-17 04:32:27
【问题描述】:
我正在尝试使用 JSoup 下载页面内容。
如果整个操作(打开连接 + 读取)花费超过 8 秒,我想立即中止。我假设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)。
以前有人遇到过这种问题吗?
【问题讨论】:
-
您使用的是哪个版本的 JSoup?
-
我正在使用 JSoup 1.8.3 版
-
我能够重现您的发现。我建议您提交错误报告@@github.com/jhy/jsoup/issues
-
已提交问题,谢谢
标签: java timeout jsoup socket-timeout-exception