我正在尝试使用HttpURLConnection正确配置连接的超时。
我的问题是在getResponseCode()调用之后它总是在60秒后超时而不是我设置的值。我的代码:
URL url = new URL(uri.toString());
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setConnectTimeout(15000);
connection.setReadTimeout(15000);
int responseCode = connection.getResponseCode();
我缺少什么?
答案 0 :(得分:1)
几天前我也遇到了同样的问题,所以做了一些研究。
我的问题是在getResponseCode()调用之后它总是在60秒后超时而不是我设置的值。
这是因为InetAddress.getByName(String)执行DNS查找。该查找不是连接的一部分 超时。
JDK不允许您在此处指定超时。它只是使用底层的超时 名称解析机制。
无论如何,我怀疑效果不仅限于Java。你应该能够观察到同样的事情 使用nslookup或来自终端的host命令超时。在"正常"环境DNS 查找超时应为1-3秒,但不是20秒。所以我强烈怀疑 您的网络设置已损坏。
解决方法:您可以在发送请求之前执行查找,因此结果已经存在 预缓存。