2012-09-05 31 views
0

我有以下的功能,我用它来从我的网站获取HTML源vb.net试图从一些页面读取XML时处理服务器响应

Public Function GetPageHTML(ByVal URL As String, _ 
     Optional ByVal TimeoutSeconds As Integer = 10) _ 
     As String 
     ' Retrieves the HTML from the specified URL, 
     ' using a default timeout of 10 seconds 
     Dim objRequest As Net.WebRequest 
     Dim objResponse As Net.WebResponse 
     Dim objStreamReceive As System.IO.Stream 
     Dim objEncoding As System.Text.Encoding 
     Dim objStreamRead As System.IO.StreamReader 

     Try 
      ' Setup our Web request 
      objRequest = Net.WebRequest.Create(URL) 
      objRequest.Timeout = TimeoutSeconds * 1000 
      ' Retrieve data from request 

      Try 
       objResponse = objRequest.GetResponse 'some times it gives an error server unavailable 503 
      Catch ex As WebException 
       MsgBox(ex.Message) 
      End Try 

      objStreamReceive = objResponse.GetResponseStream 
      objEncoding = System.Text.Encoding.GetEncoding(_ 
       "utf-8") 

      objStreamRead = New System.IO.StreamReader(_ 
       objStreamReceive, objEncoding) 
      ' Set function return value 

      GetPageHTML = objStreamRead.ReadToEnd() 
      ' Check if available, then close response 
      If Not objResponse Is Nothing Then 
       objResponse.Close() 
      End If 
     Catch 
      ' Error occured grabbing data, simply return nothing 
      Return "" 
     End Try 
    End Function 

一些次objResponse给出错误“503服务器不可用“和许多其他错误,如403等,我怎样才能独立处理每个错误?

我该如何让该功能在某段时间后重试请求?问题是try语句似乎没有处理这个,我不知道为什么我没有看到MsgBox的异常,但它显示调试器上的错误。

回答

1

将响应作为HttpWebResponse对象进行投射,并对其StatusCode属性执行Select Case。你必须清理和完成这个,但这里是一个例子:

Select Case CType(objResponse, Net.HttpWebResponse).StatusCode 

     Case Net.HttpStatusCode.InternalServerError 
      'This is sloppy, but a quick example for one of your sub-questions. 
      System.Threading.Thread.Sleep(10000) 
      'Try again. 
      objResponse = objRequest.GetResponse 
     Case Net.HttpStatusCode.BadRequest 
      'Error Handling 
     Case Net.HttpStatusCode.OK 
      'Proceed as normal. 
     Case Else 
      'Error Handling 

    End Select