在專案開發中,常會遇到需要透過 Java 發送 URL 請求並檢查該 URL 是否有效的需求。此時可以透過獲取 HTTP 狀態碼來判斷。本文提供一個簡易的程式碼範例,並附上常見 HTTP 狀態碼的對照表供參考。
try {
URL u = new URL("https://10.1.2.8:8080/fqz/page/qizha/pros_add.jsp");
try {
HttpURLConnection uConnection = (HttpURLConnection) u.openConnection();
try {
uConnection.connect();
System.out.println(uConnection.getResponseCode());
boolean connect = true;
InputStream is = uConnection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
while (br.read() != -1) {
sb.append(br.readLine());
}
String content = new String(sb);
content = new String(content.getBytes("GBK"), "ISO-8859-1");
System.out.println(content);
br.close();
} catch (Exception e) {
connect = false;
e.printStackTrace();
System.out.println("connect failed");
}
} catch (IOException e) {
System.out.println("build failed");
e.printStackTrace();
}
} catch (MalformedURLException e) {
System.out.println("build url failed");
e.printStackTrace();
}
透過 uConnection.getResponseCode() 即可取得狀態碼,進而判斷目標網站是否存在。以下整理常見 HTTP 狀態碼分類與含義:
表示臨時回應,要求請求者繼續執行操作。
| 代碼 | 說明 |
|---|---|
| 100 | 繼續:伺服器已收到請求的第一部分,正在等待其餘部分。 |
| 101 | 切換協定:請求者已要求伺服器切換協定,伺服器已確認並準備切換。 |
表示成功處理了請求的狀態碼。
| 代碼 | 說明 |
|---|---|
| 200 | 成功:伺服器已成功處理請求,通常表示提供了請求的網頁。 |
| 201 | 已創建:請求成功且伺服器創建了新資源。 |
| 202 | 已接受:伺服器已接受請求,但尚未處理。 |
| 203 | 非授權信息:伺服器已成功處理請求,但返回的信息可能來自另一來源。 |
| 204 | 無內容:伺服器成功處理請求,但未返回任何內容。 |
| 205 | 重置內容:伺服器成功處理請求,但未返回任何內容。 |
| 206 | 部分內容:伺服器成功處理了部分 GET 請求。 |
表示要完成請求,需要進一步操作,通常用於重定向。
| 代碼 | 說明 |
|---|---|
| 300 | 多種選擇:針對請求,伺服器可執行多種操作。 |
| 301 | 永久移動:請求的網頁已永久移動到新位置。 |
| 302 | 臨時移動:伺服器目前從不同位置回應請求,但請求者應繼續使用原有位置。 |
| 303 | 查看其他位置:請求者應對不同位置使用單獨的 GET 請求檢索回應。 |
| 304 | 未修改:自上次請求後,請求的網頁未修改過。 |
| 305 | 使用代理:請求者只能使用代理訪問請求的網頁。 |
| 307 | 臨時重定向:伺服器目前從不同位置回應請求,但請求者應繼續使用原有位置。 |
表示請求可能出錯,妨礙了伺服器的處理。
| 代碼 | 說明 |
|---|---|
| 400 | 錯誤請求:伺服器不理解請求的語法。 |
| 401 | 未授權:請求要求身份驗證。 |
| 403 | 禁止:伺服器拒絕請求。 |
| 404 | 未找到:伺服器找不到請求的網頁。 |
| 405 | 方法禁用:禁用請求中指定的方法。 |
| 408 | 請求超時:伺服器等待請求時發生超時。 |
| 409 | 衝突:伺服器在完成請求時發生衝突。 |
表示伺服器在嘗試處理請求時發生內部錯誤。
| 代碼 | 說明 |
|---|---|
| 500 | 伺服器內部錯誤:伺服器遇到錯誤,無法完成請求。 |
| 501 | 未實作:伺服器不具備完成請求的功能。 |
| 502 | 錯誤閘道:伺服器作為閘道或代理,從上游伺服器收到無效回應。 |
| 503 | 服務不可用:伺服器目前無法使用(因超載或停機維護)。 |
| 504 | 閘道超時:伺服器作為閘道或代理,但未及時從上游伺服器收到請求。 |
| 505 | HTTP 版本不支援:伺服器不支援請求中所用的 HTTP 協定版本。 |
常見狀態碼速查:
200 - 伺服器成功返回網頁
404 - 請求的網頁不存在
503 - 服務不可用