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をご覧ください。)
次のコードは、"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を捕捉してステータスコードを調べることができます。 |
|
Copyright 2002-2008 DOBON!. All rights reserved.
|