c# テキストボックスに入力されたURLが、存在するか調べるコード

ホームページ

本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^

            //URLに何か入っているようだったらチェック
            if (t_url.Text != "")
            {
                //URLの頭にhttpが入っていない場合は付け加える
                if (!t_url.Text.StartsWith("http://") & !t_url.Text.StartsWith("https://"))
                    t_url.Text = "https://" + t_url.Text;

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(t_url.Text);
                request.Method = "HEAD";

                try
                {
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        MessageBox.Show("ご指定のURLでは、ホームページを開く事ができませんでした。", "URLエラー", MessageBoxButton.OK, MessageBoxImage.Error);
                        return;

                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message + "\nご指定のURLでは、ホームページを開く事ができませんでした。", "URLエラー", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }
            }

前提として t_url というテキストボックスがあります。

その中にURLが入力されているという前提です。最初のtryで、名前解決ができないようなURLだった場合、エラー処理ではじきます。

名前解決が出来た場合、飛び先のURLが無い場合は、response.StatusCodeで判定しています。

404を返すようなページ

404 NOT FOUND | オレンジの国
日々勉強しているITの知識をまとめています。

という存在しないURLにアクセスすると

上記コードでどのようになるかというと、

この try catchしたエラー内容を返します。

想定では、

if (response.StatusCode != HttpStatusCode.OK)

この判定に入る予定でしたが、その前時点、

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

こちらの方でエラーを吐いてくれるようです。とりあえず目的は達成しているのでよしとします。

認証が必要なページかを判断する

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(t_url.Text);
                request.Method = "HEAD";

                try
                {
                    //このコードで、404の時も 例外処理が走る
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    // ↓このif文が走る場合があるか?分からない
                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        MessageBox.Show("ご指定のURLでは、ホームページを開く事ができませんでした。", "URLエラー", MessageBoxButton.OK, MessageBoxImage.Error);
                        return;

                    }
                }
                catch (WebException ex)
                {
                    if(ex.Response is HttpWebResponse errorResponse)
                    {
                        if(errorResponse.StatusCode == HttpStatusCode.Unauthorized)
                            MessageBox.Show(ex.Message + "\nご指定のURLにはベーシック認証が必要です。", "注意", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                        else if(errorResponse.StatusCode == HttpStatusCode.NotFound)
                        {
                            MessageBox.Show(ex.Message + "\nご指定のURLでは、ホームページを開く事ができませんでした。", "URLエラー", MessageBoxButton.OK, MessageBoxImage.Error);
                            return;
                        }
                    }
                    else
                    {
                        MessageBox.Show(ex.Message + "\nご指定のURLでは、ホームページを開く事ができませんでした。", "URLエラー", MessageBoxButton.OK, MessageBoxImage.Error);
                        return;
                    }

                }
タイトルとURLをコピーしました