核心代碼
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
int result = 0;
if (response.StatusDescription == "OK")
{
result = 1; // 站點可用
}
response.Close(); // **關鍵:必須關閉,否則多次檢測會衝突異常**
關鍵點解析
WebRequest.Create:自動根據 URL 協議建立對應 Request
GetResponse():同步發送請求並取得回應(會阻塞執行緒)
StatusDescription == "OK":HTTP 200 成功狀態
- 必須呼叫
Close():釋放連線資源,避免連線池耗盡導致後續請求失敗
進階建議
// 設定超時避免永久阻塞
request.Timeout = 5000; // 5 秒
request.ReadWriteTimeout = 5000;
// 異步版本 (不阻塞 UI 執行緒)
request.BeginGetResponse(ar =>
{
try
{
using (var resp = (HttpWebResponse)request.EndGetResponse(ar))
{
bool ok = resp.StatusCode == HttpStatusCode.OK;
// 處理結果...
}
}
catch { /* 處理異常:DNS失敗、連線拒絕、超時等 */ }
}, null);
相關類別深入學習
WebRequest / WebResponse 基類
HttpWebRequest / HttpWebResponse HTTP 專用
ServicePointManager:連線池、預設連線限制、SSL 驗證控制
- 現代替代:
HttpClient (.NET Core / .NET 5+ 推薦)
常見異常處理