0

次のコードでは、さまざまなサーバーの応答を処理しようとしています。この関数は、Webページから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の例外が発生することを除いて、これを処理する方法がわかりません。

4

2 に答える 2

1

エラーライン:

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

に何も割り当てずに呼び出されobjResponseます。

次のように変更する必要があります。

objResponse = objRequest.GetResponse

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

ftechしようとしているページのHTTPエラーコードを取得することに関して、それらの意味とその原因は次のとおりです。

http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

于 2012-09-06T17:34:55.140 に答える
1

まず、tcarvinは正しいですが、質問のコードには次の行がありません。

objResponse = objRequest.GetResponse

次に、これを実行して他の問題を解決できます。

    If Not objResponse Is Nothing Then

        'Select Case Code

    Else

        'Handle failure.

    End If
于 2012-09-06T18:07:21.560 に答える