URLタイトル取得で短縮されていた場合に、放送でURLを貼られると自動的につながってしまう。
素のURLはチェックして、放送ページでないことを確認しているんですが、短縮されるとつながってしまうことになります。
System.Net.HttpWebRequestって勝手にリダイレクト先まで行ってくれるのはとても便利なのですが、短縮URLで偽装されているときに痛いことに・・・
放送ページってことまでわかれば、踏んでもいいかってことはわかるので、当初の目的の「URLの安全性の事前確認」ということは果たせてると思います。
リダイレクトをオフにします。
webreq.AllowAutoRedirect = false;
ということは、自分でリダイレクト処理をさせる必要があるので、ここは、再帰呼び出しをつかいます。
リカーシブルコールはフォルダー一覧以外で初めて応用できる場面に出会いましたw
ヘッダーにリダイレクト先が入ってくるのでそれを取り出して処理してあげます。
あと注意事項はステータスコードが、System.Net.HttpStatusCode.MovedPermanentlyのときに処理をさせます。
これ間違えると、素敵に無限ループして、コール回数の制限までいっちゃってstack overflowになるとおもいます。
webres = (System.Net.HttpWebResponse)webreq.GetResponse(); switch (webres.StatusCode) { case System.Net.HttpStatusCode.MovedPermanently: string newurl = webres.Headers["Location"]; System.Text.RegularExpressions.Match checkUrl = System.Text.RegularExpressions.Regex.Match(newurl, "watch/((co\\d+)|(lv\\d+))", System.Text.RegularExpressions.RegexOptions.Singleline); if (checkUrl.Success) { _host.ShowStatusMessage(checkUrl.Value + "は放送urlなのでタイトル取得しません"); return "lvpage"; } return GetWebPageTitlesub(newurl, ref rescode); }
ということで、うまくいくようになりました。
普段短縮URL貼る人とかいないのですが、ツイッターメッセージを運用コメントに出せるようにしてたら、#nicoliveのタグのメッセージは放送開始メッセージが多いわけで・・
通知されるたびに、放送に接続してたんじゃたまりませんよね。
ということで、来週はついったーメッセージの投稿機能が追加されるようです。