「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 Continue | Continue |
101 Switching Protocols | SwitchingProtocols |
200 OK | OK |
201 Created | Created |
202 Accepted | Accepted |
203 Non-Authoritative Information | NonAuthoritativeInformation |
204 No Content | NoContent |
205 Reset Content | ResetContent |
206 Partial Content | PartialContent |
300 Multiple Choices | Ambiguous または MultipleChoices |
301 Moved Permanently | Moved または MovedPermanently |
302 Found | Found または Redirect |
303 See Other | RedirectMethod または SeeOther |
304 Not Modified | NotModified |
305 Use Proxy | UseProxy |
306 (Unused) | Unused |
307 Temporary Redirect | TemporaryRedirect または RedirectKeepVerb |
400 Bad Request | BadRequest |
401 Unauthorized | Unauthorized |
402 Payment Required | PaymentRequired |
403 Forbidden | Forbidden |
404 Not Found | NotFound |
405 Method Not Allowed | MethodNotAllowed |
406 Not Acceptable | NotAcceptable |
407 Proxy Authentication Required | ProxyAuthenticationRequired |
408 Request Timeout | RequestTimeout |
409 Conflict | Conflict |
410 Gone | Gone |
411 Length Required | LengthRequired |
412 Precondition Failed | PreconditionFailed |
413 Request Entity Too Large | RequestEntityTooLarge |
414 Request-URI Too Long | RequestUriTooLong |
415 Unsupported Media Type | UnsupportedMediaType |
416 Requested Range Not Satisfiable | RequestedRangeNotSatisfiable |
417 Expectation Failed | ExpectationFailed |
500 Internal Server Error | InternalServerError |
501 Not Implemented | NotImplemented |
502 Bad Gateway | BadGateway |
503 Service Unavailable | ServiceUnavailable |
504 Gateway Timeout | GatewayTimeout |
505 HTTP Version Not Supported | HttpVersionNotSupported |
次のコードは、"http://www.yahoo.co.jp/hoge.html"というURLを要求した時、サーバーから返されるステータスコードを表示するものです。
'要求する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
//要求する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を捕捉してステータスコードを調べることができます。
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。