我继承的代码使用HttpURLConnection
建立与Apache托管的Perl脚本的连接以获取一些数据。我希望在2秒之后将请求超时,并将消息打印到日志中。
我在Perl中放了sleep 10
命令,使Perl脚本延迟10秒。但是,尽管已将HttpURLConnection
的超时设置为1毫秒,但它仍然从Perl获取请求,忽略了我的超时设置。
我做错了什么?这是我的代码,简化为我希望的基本要点:
HttpURLConnection connection = (HttpURLConnection) new URL(URLDecoder.decode(url)).openConnection();
connection.setConnectTimeout(1) ;
output = connection.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(output, "UTF-8"));
bufferedWriter.write(sb.toString());/* the request */
bufferedWriter.close();
output.close();
try {
InputStream res = connection.getInputStream();
writer = new StringWriter();
IOUtils.copy(res, writer, "ISO-8859-1");
}
catch(java.net.SocketTimeoutException e) {
logger.debug("CONNECTION TIMED OUT");
}
return writer.toString(); // the returned data returned to calling function
我有两个问题:
我只是希望这不起作用。我已将连接的超时设置为1毫秒。 Perl(绝对)睡了10秒钟。然后,其次,我希望能够捕获超时错误。
答案 0 :(得分:2)
我认为connectTimeout
仅适用于连接本身,即握手完成之前的时间段。对于等待服务器发送内容的超时,请尝试connection.setReadTimeout(1);
。