VB.NET | HttpWebRequest,如何查看主机是否在线?

时间:2012-12-18 19:16:00

标签: vb.net httpwebrequest httpwebresponse whitelist

我正在为VB.NET中的应用程序编写白名单。 我正在使用HttpWebRequest方法和HttpWebResponse。

如果白名单主机已关闭,则会绕过白名单,并且任何有漏洞的人都可以使用该程序。

Public Function GetWhitelist(ByVal PageURL As String) As String
        Dim S As String = ""
        Try
            Dim Request As HttpWebRequest = WebRequest.Create("WHITELIST URL HERE")
            Dim Response As HttpWebResponse = Request.GetResponse()
            Using Reader As StreamReader = New StreamReader(Response.GetResponseStream())
                S = Reader.ReadToEnd
            End Using
        Catch ex As Exception
            Debug.WriteLine("Start Program Error. Handle:0")
        End Try
        Return S
    End Function

如果网站出现故障,我想给用户一个错误,任何想法? 问候。

2 个答案:

答案 0 :(得分:2)

你的错误情况是什么?仅此功能不会阻止在发生异常时发生任何事情。该函数仍然会返回一个字符串。因此,任何消费代码都必须查找错误条件并相应地处理它们。

如果请求失败,您应该有意义地处理异常。我头脑中的两个想法包括:

1)让异常在堆栈中冒泡:

Public Function GetWhitelist(ByVal PageURL As String) As String
    Dim S As String = ""
    Dim Request As HttpWebRequest = WebRequest.Create("WHITELIST URL HERE")
    Dim Response As HttpWebResponse = Request.GetResponse()
    Using Reader As StreamReader = New StreamReader(Response.GetResponseStream())
        S = Reader.ReadToEnd
    End Using
    Return S
End Function

这将尝试联系主机,如果尝试失败,则抛出异常而不是返回字符串。

2)抛出自定义异常:

Public Function GetWhitelist(ByVal PageURL As String) As String
    Dim S As String = ""
    Try
        Dim Request As HttpWebRequest = WebRequest.Create("WHITELIST URL HERE")
        Dim Response As HttpWebResponse = Request.GetResponse()
        Using Reader As StreamReader = New StreamReader(Response.GetResponseStream())
            S = Reader.ReadToEnd
        End Using
    Catch ex As Exception
        Debug.WriteLine("Start Program Error. Handle:0")
        Throw New SomeCustomException(String.Format("Unable to contact host: {0}", PageURL), ex)
    End Try
    Return S
End Function

这将提供一个更有针对性的异常,而不是响应读取器发出的任何异常,将提供有关记录和分析错误的有用运行时信息(即PageURL的运行时值),并采取步骤从该对象之外的代码隐藏实现细节(因为该代码并不真正关心HttpWebRequestHttpWebResponse,它只是想知道URL是否良好)。

请记住,抛出异常是函数的完全可接受的退出路径。它不会总是必须返回一个值。异常是指示错误情况的适当方式。但是,您当前的实现会“吞下”异常并且不会向消费代码提供任何出错的指示。相反,它返回String.Empty的“神奇值”,消耗代码可能会或可能不会忽略。

答案 1 :(得分:0)

更改您的异常处理程序。执行此操作的正确方法是尝试请求并在失败时处理异常。