尝试从某个页面读取xml时,vb.net处理服务器响应

尝试从某个页面读取xml时,vb.net处理服务器响应,vb.net,Vb.net,我有以下功能,我用它从我的网站上获取html源代码 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

我有以下功能,我用它从我的网站上获取html源代码

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,但它在调试器上显示了错误。

将响应强制转换为HttpWebResponse对象,并对其StatusCode属性进行选择。您必须清理并完成此操作,但以下是一个示例:

    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