2012-12-18 59 views
1

我在VB.NET中編寫我的應用程序的白名單。 我正在使用HttpWebRequest方法和HttpWebResponse。VB.NET | HttpWebRequest,如何查看主機是否在線?

如果白名單主機處於關閉狀態,則會繞過白名單,並且任何存在漏洞的人都可以使用該程序。

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 

我想給用戶一個錯誤,如果網站關閉了,有什麼想法嗎? 此致敬禮。

回答

0

更改您的異常處理程序。做到這一點的正確方法是隻嘗試請求並處理異常(如果失敗)。

+0

Joel,感謝您的迴應,當您說要嘗試請求時,您究竟意味着什麼?謝謝。 –

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,它可能會或可能不會忽略。