Vb.net VB:NET";对象引用未设置为对象的实例。”;在Net.WebResponse变量中

Vb.net VB:NET";对象引用未设置为对象的实例。”;在Net.WebResponse变量中,vb.net,Vb.net,在以下代码中,我尝试处理不同的服务器响应: 此函数用于从网页读取xml或html文件 在注释行中,我得到“对象引用未设置为对象的实例” 我想知道为什么 Public Function GetPageHTML(ByVal URL As String, _ Optional ByVal TimeoutSeconds As Integer = 10) _ As String ' Retrieves the HTML from the specified URL, ' using

在以下代码中,我尝试处理不同的服务器响应: 此函数用于从网页读取xml或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

        Select Case CType(objResponse, Net.HttpWebResponse).StatusCode 'Here is where i get the error Object reference not set to an instance of an object.

    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

        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
现在,当我删除switch语句并将
objResponse
编写为

objResponse = objRequest.GetResponse
除了403或503错误之外,我不知道如何处理此问题。

您的错误行:

选择案例CType(objResponse,Net.HttpWebResponse)。StatusCode

调用时从未将任何内容分配给
objResponse

您需要将其更改为:

objResponse = objRequest.GetResponse

Select Case CType(objResponse, Net.HttpWebResponse).StatusCode`
关于获取您尝试ftech的页面的HTTP错误代码,以下是它们的含义及其原因:


首先,tcarvin是正确的,您的问题代码缺少这一行:

objResponse = objRequest.GetResponse
其次,您可以这样做来解决其他问题:

    If Not objResponse Is Nothing Then

        'Select Case Code

    Else

        'Handle failure.

    End If

但是当我这样做时,当出现403或503错误时,它会在该行上抛出一个异常,并且不会继续到选择的情况,这就是全部问题。如果您没有授权下载文件(403),或者web处理程序资源脱机(503),那么就没有要下载的文件。当没有文件时,您希望代码做什么?我想这就是问题所在,现在已经解决了,非常感谢