如何使HttpURLConnection超时?

时间:2014-02-14 18:28:05

标签: java httpurlconnection

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

1 个答案:

答案 0 :(得分:2)

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