C#でリンクチェックをおこなう
C#で特定のURLのリンクチェックを行う場合は、
HTTPRequest時のステータスコードで判断すると良いかと思います。
ここでは、URLを引数に受け取ってステータスコードを返す関数を紹介します。
/// <summary> /// ステータスコードを取得する /// </summary> /// <param name="url">URL</param> /// <returns>ステータスコードの列挙対</returns> public static HttpStatusCode GetStatusCode(string url) { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); HttpWebResponse res = null; HttpStatusCode statusCode; try { res = (HttpWebResponse)req.GetResponse(); statusCode = res.StatusCode; } catch (WebException ex) { res = (HttpWebResponse)ex.Response; if (res != null) { statusCode = res.StatusCode; } else { throw; // サーバ接続不可などの場合は再スロー } } finally { if (res != null) { res.Close(); } } return statusCode; }
HTTPWebResponse.GetResponse()でURLのコンテンツを取得しようとした場合、
リンクエラーのときは、例外WebExceptionが発生します。
WebException内で例外のレスポンスコード(URLが存在しない場合は404)が返されます。
呼び出しもとのメソッドレスポンスコードを確認し、nullの場合はリンクエラーが
が無いということになります。
ただし、HttpWebRequest,HttpWebResponseを用いたリンクチェックは
負荷がかかるため時間がかかります。
連続して大量にメソッドを呼び出すと、フリーズしてしまうので注意してください。
この記事へのコメントはこちら