使用httpwebrequest和uri问题的响应

时间:2014-09-02 13:03:30

标签: vb.net httpwebrequest getresponse

我正在尝试测试某个网站是启动还是关闭,我遇到了一些问题。

首先我知道如果我要测试服务器的状态,可以使用一段简单的代码来完成它:

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在线且有内容时。不仅适用于谷歌,也适用于其他网站。

关于此代码我有两个问题。

  1. 为什么它告诉我“网站似乎根本没有内容!”即使http://google.com或任何其他网站在线且有内容?

  2. 假设我只在google.com或在TextBox1中没有http://https://的任何网站输入内容时,我会向我显示错误invalid URI format。无论如何,我可以自动将http://https://添加到TextBox1中输入的网址的开头吗?

  3. 我知道我可以将其添加到上面的代码中来执行此操作:

    Dim baseAddressx As String = "http://"
    Dim targetURI As New Uri(baseAddressx & TextBox1.Text) 
    

    但是如果我自己添加http://google.com的代码会导致问题时输入http://怎么办?有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

我认为你应该做的是你应该阅读回复的状态代码,而不是内容长度。它可以理解如下:

HttpWebResponse res = (HttpWebResponse)fr.GetResponse(); int statusCode = (int)response.StatusCode if(statusCode == 200) //Website is up else.

您可以创建枚举以充分了解它。并根据您获得的价值以各种方式回复用户。 希望有所帮助。

抱歉,我不是VB的专家。我知道C#,我希望你能轻松地将它转换为VB。请参阅here