DOBON.NET

HTTPの応答時のステータスコードを取得する

WebRequest、WebResponseクラスを使ってファイルをダウンロードし表示する」で紹介したように、HttpWebRequest、HttpWebResponseクラスを使って応答を受信した時、そのステータスコード("200 OK"や"404 Not Found"など)はStatusCodeプロパティで、またその説明はStatusDescriptionプロパティで分かります。

"404 Not Found"などのプロトコルレベルのエラーの場合、HttpWebRequestのGetResponseメソッドでWebException例外がスローされます。この場合ステータスコードを知るには、WebExceptionを捕捉し、そのStatusプロパティがWebExceptionStatus.ProtocolErrorであるか調べ、そうであればResponseプロパティからHttpWebResponseを取得し、StatusCodeプロパティを調べます。

StatusCodeプロパティで返されるHttpStatusCode列挙体のメンバとHTTPステータスコードの対応は次のようになっています。(それぞれのステータスコードの説明に関しては、RFC2616をご覧ください。)

ステータスコードHttpStatusCode列挙体のメンバ名
100 ContinueContinue
101 Switching ProtocolsSwitchingProtocols
200 OKOK
201 CreatedCreated
202 AcceptedAccepted
203 Non-Authoritative InformationNonAuthoritativeInformation
204 No ContentNoContent
205 Reset ContentResetContent
206 Partial ContentPartialContent
300 Multiple ChoicesAmbiguous または MultipleChoices
301 Moved PermanentlyMoved または MovedPermanently
302 FoundFound または Redirect
303 See OtherRedirectMethod または SeeOther
304 Not ModifiedNotModified
305 Use ProxyUseProxy
306 (Unused)Unused
307 Temporary RedirectTemporaryRedirect または RedirectKeepVerb
400 Bad RequestBadRequest
401 UnauthorizedUnauthorized
402 Payment RequiredPaymentRequired
403 ForbiddenForbidden
404 Not FoundNotFound
405 Method Not AllowedMethodNotAllowed
406 Not AcceptableNotAcceptable
407 Proxy Authentication RequiredProxyAuthenticationRequired
408 Request TimeoutRequestTimeout
409 ConflictConflict
410 GoneGone
411 Length RequiredLengthRequired
412 Precondition FailedPreconditionFailed
413 Request Entity Too LargeRequestEntityTooLarge
414 Request-URI Too LongRequestUriTooLong
415 Unsupported Media TypeUnsupportedMediaType
416 Requested Range Not SatisfiableRequestedRangeNotSatisfiable
417 Expectation FailedExpectationFailed
500 Internal Server ErrorInternalServerError
501 Not ImplementedNotImplemented
502 Bad GatewayBadGateway
503 Service UnavailableServiceUnavailable
504 Gateway TimeoutGatewayTimeout
505 HTTP Version Not SupportedHttpVersionNotSupported

次のコードは、"http://www.yahoo.co.jp/hoge.html"というURLを要求した時、サーバーから返されるステータスコードを表示するものです。

VB.NET
コードを隠すコードを選択
'要求するURL
Dim url As String = "http://www.yahoo.co.jp/hoge.html"

'WebRequestの作成
Dim webreq As System.Net.HttpWebRequest = _
    CType(System.Net.WebRequest.Create(url), _
    System.Net.HttpWebRequest)

Dim webres As System.Net.HttpWebResponse = Nothing
Try
    'サーバーからの応答を受信するためのWebResponseを取得
    webres = CType(webreq.GetResponse(), System.Net.HttpWebResponse)

    '応答したURIを表示する
    Console.WriteLine(webres.ResponseUri)
    '応答ステータスコードを表示する
    Console.WriteLine("{0}:{1}", _
        webres.StatusCode, webres.StatusDescription)
Catch ex As System.Net.WebException
    'HTTPプロトコルエラーかどうか調べる
    If ex.Status = System.Net.WebExceptionStatus.ProtocolError Then
        'HttpWebResponseを取得
        Dim errres As System.Net.HttpWebResponse = _
            CType(ex.Response, System.Net.HttpWebResponse)
        '応答したURIを表示する
        Console.WriteLine(errres.ResponseUri)
        '応答ステータスコードを表示する
        Console.WriteLine("{0}:{1}", _
            errres.StatusCode, errres.StatusDescription)
    Else
        Console.WriteLine(ex.Message)
    End If
Finally
    '閉じる
    If Not (webres Is Nothing) Then
        webres.Close()
    End If
End Try
C#
コードを隠すコードを選択
//要求するURL
string url = "http://www.yahoo.co.jp/hoge.html";

//WebRequestの作成
System.Net.HttpWebRequest webreq =
    (System.Net.HttpWebRequest) System.Net.WebRequest.Create(url);

System.Net.HttpWebResponse webres = null;
try
{
    //サーバーからの応答を受信するためのWebResponseを取得
    webres = (System.Net.HttpWebResponse) webreq.GetResponse();

    //応答したURIを表示する
    Console.WriteLine(webres.ResponseUri);
    //応答ステータスコードを表示する
    Console.WriteLine("{0}:{1}",
        webres.StatusCode, webres.StatusDescription);
}
catch (System.Net.WebException ex)
{
    //HTTPプロトコルエラーかどうか調べる
    if (ex.Status == System.Net.WebExceptionStatus.ProtocolError)
    {
        //HttpWebResponseを取得
        System.Net.HttpWebResponse errres =
            (System.Net.HttpWebResponse) ex.Response;
        //応答したURIを表示する
        Console.WriteLine(errres.ResponseUri);
        //応答ステータスコードを表示する
        Console.WriteLine("{0}:{1}",
            errres.StatusCode, errres.StatusDescription);
    }
    else
        Console.WriteLine(ex.Message);
}
finally
{
    //閉じる
    if (webres != null)
        webres.Close();
}

WebClientクラスを使用している場合も上記と同じようにWebExceptionを捕捉してステータスコードを調べることができます。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。
共有する

この記事への評価

この記事へのコメント

この記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームへ移動します。通常のご質問、ご意見等は掲示板へご投稿ください。