前言
如何知道外部站點是否正在運行?
如果使用瀏覽器,直接訪問對應站點即可。
那么,使用 C# 以編程方式,如何實現呢?
GET 請求
首先想到的,就是使用 HttpClient 向該站點發送 HTTP 請求,并檢查返回狀態:
var?httpClient?=?new?HttpClient();??
var?result?=?await?httpClient.GetAsync("http://somesite.xxx");
Console.WriteLine(result.IsSuccessStatusCode);
但是,GET 請求會返回響應正文,會耗費一定的帶寬資源。
HEAD 請求
改進的方式,是使用 HEAD 請求,它不會返回響應正文:
var?httpClient?=?new?HttpClient();
var?request?=?new?HttpRequestMessage
{RequestUri?=?new?Uri("http://somesite.xxx"),Method?=?HttpMethod.Head
};
var?result?=?await?httpClient.SendAsync(request);
Console.WriteLine(result.IsSuccessStatusCode);
但是,這也會有一些問題,比如站點改成需要身份驗證了,則上述代碼會返回 false,即使站點是運行狀態。
Ping
使用命令行時,可以運行 ping 命令并查看結果:
C# 下同樣可以使用 Ping:
Ping?ping?=?new?Ping();
var?hostName?=?new?Uri("http://somesite.xxx").Host;var result?=?await?ping.SendPingAsync(hostName);
Console.WriteLine(result.Status?==?IPStatus.Success);
需要注意的是,如果站點開啟防火墻,禁止了 ping 命令的 ICMP 回顯消息,則上述代碼會返回 false。
結論
你有什么其他的方法?歡迎到“My IO”公眾號留言討論!
添加微信號【MyIO666】,邀你加入技術交流群