Java 如何使HttpURLConnection超时?

Java 如何使HttpURLConnection超时?,java,httpurlconnection,Java,Httpurlconnection,我继承的代码使用HttpURLConnection与Apache托管的Perl脚本建立连接,以获取一些数据。我想让请求在2秒后超时,并在日志中打印一条消息 我在Perl中添加了一个sleep 10命令,这会使Perl脚本延迟10秒。但是,尽管将HttpURLConnection上的超时设置为1毫秒,它仍然从Perl获取请求,忽略我的超时设置 我做错了什么?以下是我的代码,简化为我希望的要点: HttpURLConnection connection = (HttpURLConnection) n

我继承的代码使用
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秒。其次,我希望捕获超时错误。

我相信
连接超时
仅适用于连接本身,即握手完成之前的时间段。对于等待服务器发送内容的超时,请尝试
connection.setReadTimeout(1)

的可能重复显然,使用
1
您将始终遇到异常。该值被解释为毫秒,但我相信您已经知道了…谢谢。我还没有机会测试它。但基于该方法的文档,它看起来正是我想要的。