我有一個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