我正在尝试测试某个网站是启动还是关闭,我遇到了一些问题。
首先我知道如果我要测试服务器的状态,可以使用一段简单的代码来完成它:
If My.Computer.Network.Ping(TextBox1.Text) Then
TextBox2.Text = "Online"
Else
TextBox2.Text = "Offline"
End If
但是我拒绝这样做,因为Pings并不总是确定外部Web服务器是否正常运行的可靠方法。
所以我尝试使用此代码解决这个问题:
Try
Dim fr As System.Net.HttpWebRequest
Dim targetURI As New Uri(TextBox1.Text)
fr = DirectCast(System.Net.HttpWebRequest.Create(targetURI), System.Net.HttpWebRequest)
If (fr.GetResponse().ContentLength > 0) Then
TextBox2.Text = "Website appears to exist!"
Else
TextBox2.Text = "Website appears to have no content at all!"
End If
Catch ex As System.Net.WebException
TextBox2.Text = "Cannot connect - website not responding!"
End Try
该代码有效。但问题是,如果我在http://google.com
中键入TextBox1
并尝试获取服务器状态,则有时会显示为“网站似乎根本没有内容!”甚至当http://google.com
在线且有内容时。不仅适用于谷歌,也适用于其他网站。
关于此代码我有两个问题。
为什么它告诉我“网站似乎根本没有内容!”即使http://google.com
或任何其他网站在线且有内容?
假设我只在google.com
或在TextBox1中没有http://
或https://
的任何网站输入内容时,我会向我显示错误invalid URI format
。无论如何,我可以自动将http://
或https://
添加到TextBox1中输入的网址的开头吗?
我知道我可以将其添加到上面的代码中来执行此操作:
Dim baseAddressx As String = "http://"
Dim targetURI As New Uri(baseAddressx & TextBox1.Text)
但是如果我自己添加http://google.com
的代码会导致问题时输入http://
怎么办?有没有更好的方法来实现这一目标?
答案 0 :(得分:0)
我认为你应该做的是你应该阅读回复的状态代码,而不是内容长度。它可以理解如下:
HttpWebResponse res = (HttpWebResponse)fr.GetResponse();
int statusCode = (int)response.StatusCode
if(statusCode == 200)
//Website is up else.
您可以创建枚举以充分了解它。并根据您获得的价值以各种方式回复用户。 希望有所帮助。
抱歉,我不是VB的专家。我知道C#,我希望你能轻松地将它转换为VB。请参阅here。