我有一个URL的形式如何快速检查URL服务器可用
http://www.mywebsite.com/util/conv?a=1&from=%s&to=%s
而且要检查它是否可用。
如果我尝试用浏览器打开这些链接,链接将重定向到一个错误的请求页面,但通过代码我可以获取我需要的数据。
在HTTP请求过程中使用try-catch块非常慢,所以我想知道如何ping一个类似的地址来检查它的服务器是否处于活动状态。
我已经试过
boolean reachable = InetAddress.getByName(myLink).isReachable(6000);
但总是返回false
。
我也曾尝试
public static boolean exists(String URLName) {
try {
HttpURLConnection.setFollowRedirects(false);
HttpURLConnection con = (HttpURLConnection) new URL(URLName).openConnection();
con.setConnectTimeout(1000);
con.setReadTimeout(1000);
con.setRequestMethod("HEAD");
return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
返回在过程结束时正确的值,如果服务器不可用有点太慢了。
编辑
我已经明白了是缓慢的原因
一)如果服务器返回了一些数据,但中断请求之前完成请求超时被忽略,并卡住,直到返回一个Exception
这导致执行到达catch块,这是这种方法缓慢的原因,但我还没有找到有效的解决方案来避免这种情况。
b)如果我启动android设备并在没有连接的情况下打开应用程序,则错误值将被正确返回,如果应用程序在互联网连接处于活动状态并且设备失去其Internet连接时打开,则会发生与情况A相同的情况(也如果我试图终止并重新启动应用程序...我不知道为什么,我想这东西仍然缓存)
所有这些似乎与事实Java URLConnection
不提供故障安全超时读取。看看this link的示例,我已经看到使用线程以某种方式中断连接,但如果我简单地添加new Thread(new InterruptThread(Thread.currentThread(), con)).start();
这一行,就像示例中没有任何更改。
尝试使用getResponseMessage()或getResponseCode() – KOTIOS 2014-09-12 09:59:20
错误的请求意味着您的URL无效,但并非服务器不可用 – 2014-09-12 11:03:46
@mtetno您能否给我更多详细信息用户回答了类似的问题,例外的相关尝试catch块 – AndreaF 2014-09-12 15:59:59