java.net.URLConnection是一個Http Connecion物件,可以用來連接網站,並處理回傳的資訊資料,當然也可以使用socket連線來做這些事情,不過會顯的麻煩多了。
利用java.net.URLConnection可以直接取得response的Status來判斷網站是不存在、連線錯誤、無法存取,而如果需要更詳細的回傳資訊可以增加給於的Header。而如果需要取得網址的ip則可使用java.net.Inet4Address.getByName(網址名稱)。
有一點要注意的是在JDK1.4以前並有沒有setReadTimeout這個函數,所以需要自己實作一個HttpURLConnectionTimeout來操作TimeOut,可以參考Adding Socket Timeout to java.net.URLConnection這一篇。
這是範例的結果:
原始碼如下:
public class TestURLStatus {
public static void main(String args[]) {
try {
java.net.URL url = new java.net.URL(
"http://tw.yahoo.com/123123");
java.net.HttpURLConnection uc = (java.net.HttpURLConnection) url
.openConnection();
uc.setRequestProperty("User-agent", "IE/6.0");
uc.setReadTimeout(30000);// 設定timeout時間
uc.connect();// 連線
System.out.println("網址/ip位置:"+java.net.Inet4Address.getByName(url.getHost()));
int status = uc.getResponseCode();
System.out.println(status);
switch (status) {
case java.net.HttpURLConnection.HTTP_GATEWAY_TIMEOUT://504
System.out.println("連線網址逾時!");
break;
case java.net.HttpURLConnection.HTTP_FORBIDDEN://403
System.out.println("連線網址禁止!");
break;
case java.net.HttpURLConnection.HTTP_INTERNAL_ERROR://500
System.out.println("連線網址錯誤或不存在!");
break;
case java.net.HttpURLConnection.HTTP_NOT_FOUND://404
System.out.println("連線網址不存在!");
break;
case java.net.HttpURLConnection.HTTP_OK:
System.out.println("OK!");
break;
}
} catch (java.net.MalformedURLException e) {
System.out.println("網址格式錯誤!!!");
e.printStackTrace();
} catch (java.io.IOException e) {
System.out.println("連線有問題!!!!!!");
e.printStackTrace();
}
}
}
One thought to “[Java]利用URLConnection檢查網站狀態”