我正试图将java.net.URLConnection
的超时设置为:
URL url = new URL("http://google.com");
URLConnection con = url.openConnection();
con.setConnectTimeout(2000);
con.setReadTimeout(2000);
InputStream in = con.getInputStream();
doc = new Tidy().parseDOM(in, null);
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile("//td//span");
Node form = (Node) expr.evaluate(doc, XPathConstants.NODE);
问题是,当我将timeout设置为2000(2秒)时,它会等待更长的时间(例如,我自己数了20秒),直到抛出timeout异常。
问题出在哪里
如何将超时设置为完全按照我设置的值工作?
readTimeOut
在Sun(Oracle)的实现中不能可靠地工作。JavaDocs:中甚至提到了这一点
此方法的某些非标准实现忽略指定的超时。要查看读取超时设置,请调用getReadTimeout()。
不过,您可以使用线程或计时器模拟超时。将连接传递给子线程,并要求该线程在超时后调用disconnect
或类似的东西。