【问题标题】:VB.NET | HttpWebRequest, How to see if the host is online?VB.NET | HttpWebRequest,如何查看主机是否在线?
【发布时间】:2012-12-18 19:16:00
【问题描述】:

我正在为我在 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

如果网站关闭,我想给用户一个错误,有什么想法吗? 问候。

【问题讨论】:

    标签: vb.net httpwebrequest httpwebresponse whitelist


    【解决方案1】:

    您的错误情况是什么?仅此功能并不能防止发生异常时发生任何事情。该函数仍然退出并返回一个字符串。所以任何消费代码都必须寻找错误条件并相应地处理它们。

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

    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 的“神奇值”,消费代码可能会或可能不会忽略它。

    【讨论】:

      【解决方案2】:

      更改您的异常处理程序。正确的做法是尝试请求并在失败时处理异常。

      【讨论】:

      • Joel,感谢您的回复,当您说尝试请求时,您的意思是什么?谢谢。
      猜你喜欢
      • 1970-01-01
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      相关资源
      最近更新 更多