【C#】指定したURLに定期的にリクエストを送信するツールを作ってみた
おはようございます。
久しぶりのC#ネタです。
知り合いから依頼をされてちょっとしたツールを作ったので公開。
スポンサーリンク
画面の作成
各種コントロールを配置。
今回は Timer を使って画面で定期処理を実行します。
細かい制御なんかは入れていません。
プログラム
クラス
2つほど別でクラスを用意。
FileUtil.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | usingSystem.Text; usingSystem.Xml.Serialization; usingSystem.IO; namespaceUrlClicker { classFileUtil { /// <summary> /// ファイルまたはフォルダが存在するかどうかを返します. /// </summary> /// <param name="path">ファイル(ディレクトリ)パス</param> /// <returns>TRUE:存在する/FALSE:存在しない</returns> publicstaticboolIsExists(stringpath) { returnIsExistsFile(path)|IsExistsDirectory(path); } /// <summary> /// ファイルが存在するかどうかを返します. /// </summary> /// <param name="filePath">ファイルパス</param> /// <returns>TRUE:存在する/FALSE:存在しない</returns> publicstaticboolIsExistsFile(stringfilePath) { returnFile.Exists(filePath); } /// <summary> /// ディレクトリが存在するかどうかを返します. /// </summary> /// <param name="directoryPath">ディレクトリパス</param> /// <returns>TRUE:存在する/FALSE:存在しない</returns> publicstaticboolIsExistsDirectory(stringdirectoryPath) { returnDirectory.Exists(directoryPath); } /// <summary> /// 設定ファイルを保存します. /// </summary> /// <param name="set">設定情報</param> /// <param name="path">保存先ファイルパス</param> publicstaticvoidSaveSettingInfo(SettingInfo set,stringpath) { XmlSerializer serializer1=newXmlSerializer(typeof(SettingInfo)); // ファイルを開く(UTF-8 BOM無し) StreamWriter sw=newStreamWriter(path,false,newUTF8Encoding(false)); // シリアル化し、XMLファイルに保存する serializer1.Serialize(sw,set); // 閉じる sw.Close(); } /// <summary> /// 設定ファイルを読み込みます. /// </summary> /// <param name="path">設定情報ファイルのパス</param> /// <returns></returns> publicstaticSettingInfo LoadSettingInfo(stringpath) { SettingInfo set=newSettingInfo(); // XmlSerializerオブジェクトの作成 XmlSerializer serializer=newXmlSerializer(typeof(SettingInfo)); // ファイルを開く StreamReader sr=newStreamReader(path,newUTF8Encoding(false)); // XMLファイルから読み込み、逆シリアル化する set=(SettingInfo)serializer.Deserialize(sr); // 閉じる sr.Close(); returnset; } } } |
ファイル関連の処理を記述。主に設定や履歴をファイルに出力、読み込みを出来るように。
SettingInfo.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | usingSystem; usingSystem.Collections.Generic; namespaceUrlClicker { publicclassSettingInfo { /// <summary> /// 実行間隔 /// </summary> publicstringInterval{set;get;} /// <summary> /// 処理履歴リスト /// </summary> publicList<String>HistoryList{set;get;} /// <summary> /// URLリスト /// </summary> publicList<String>UrlList{set;get;} } } |
画面項目を保存するために用意したクラス。
メイン処理
MainForm.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 | usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.Windows.Forms; usingSystem.Net; usingSystem.IO; usingSystem.Reflection; namespaceUrlClicker { publicpartial classMainForm:Form { // 設定ファイルのパス privatestringappDir=""; privatestringsettingFilePath=""; publicMainForm() { InitializeComponent(); // 実行ディレクトリのパスを取得 Assembly mainAssembly=Assembly.GetExecutingAssembly(); appDir=System.IO.Path.GetDirectoryName(mainAssembly.Location); // 設定ファイル名 settingFilePath=appDir+@"\settings.config"; // 前回設定情報を復元 RestoreSettings(); } /// <summary> /// 追加ボタンクリック /// </summary> /// <param name="sender"></param> /// <param name="e"></param> privatevoidBtn_add_Click(objectsender,EventArgse) { lb_url.Items.Add(txb_url.Text); txb_url.Text=""; } /// <summary> /// URLリスト選択変更 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> privatevoidLb_url_SelectedIndexChanged(objectsender,EventArgse) { if(lb_url.SelectedItem!=null) { Stringtext=lb_url.SelectedItem.ToString(); txb_url.Text=text; } } /// <summary> /// 開始ボタンクリック /// </summary> /// <param name="sender"></param> /// <param name="e"></param> privatevoidBtn_start_Click(objectsender,EventArgse) { inttime=0; int.TryParse(txb_time.Text,outtime); timer1.Interval=time*60000; timer1.Enabled=true; toolStripStatusLabel1.Text="実行中..."; SendRequest(); } /// <summary> /// 停止ボタンクリック /// </summary> /// <param name="sender"></param> /// <param name="e"></param> privatevoidBtn_stop_Click(objectsender,EventArgse) { timer1.Enabled=false; toolStripStatusLabel1.Text="停止"; } /// <summary> /// タイマー処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> privatevoidTimer1_Tick(objectsender,EventArgse) { SendRequest(); } /// <summary> /// リクエスト送信 /// </summary> privatevoidSendRequest() { foreach(Stringurl inlb_url.Items) { //HttpWebRequestを作成 try { HttpWebRequest webreq=(HttpWebRequest)WebRequest.Create(url); //サーバーからの応答を受信するためのHttpWebResponseを取得 HttpWebResponse webres=(HttpWebResponse)webreq.GetResponse(); //応答データを受信するためのStreamを取得 Stream st=webres.GetResponseStream(); //文字コードを指定して、StreamReaderを作成 StreamReader sr=newStreamReader(st,Encoding.UTF8); //データをすべて受信 stringhtmlSource=sr.ReadToEnd(); //閉じる sr.Close(); st.Close(); webres.Close(); DateTime dt=DateTime.Now; stringresult=dt.ToString("yyyy/MM/dd HH:mm:ss"); lb_hist.Items.Add("["+result+"] ["+url+"]"); } catch { } } } /// <summary> /// 画面の入力値などを設定ファイルに保存します. /// </summary> privateSettingInfo SaveSettings() { // 画面設定情報を取得し設定情報クラスにセット SettingInfo set=newSettingInfo(); set.Interval=txb_time.Text; List<String>urlList=newList<String>(); foreach(Stringitem inlb_url.Items) { urlList.Add(item); } set.UrlList=urlList; List<String>histList=newList<String>(); foreach(Stringitem inlb_hist.Items) { histList.Add(item); } set.HistoryList=histList; // 設定ファイルの保存 FileUtil.SaveSettingInfo(set,settingFilePath); returnset; } /// <summary> /// 画面の前回情報を設定ファイルから復元します. /// </summary> privatevoidRestoreSettings() { // 設定ファイルが存在しなければ処理を中止 if(!FileUtil.IsExistsFile(settingFilePath)) { return; } // 設定ファイルの読み込み SettingInfo set=FileUtil.LoadSettingInfo(settingFilePath); txb_time.Text=set.Interval; foreach(Stringurl inset.UrlList) { lb_url.Items.Add(url); } foreach(Stringhistory inset.HistoryList) { lb_hist.Items.Add(history); } } /// <summary> /// 閉じるボタン /// </summary> /// <param name="sender"></param> /// <param name="e"></param> privatevoidBtn_close_Click(objectsender,EventArgse) { this.Close(); } /// <summary> /// 履歴クリア /// </summary> /// <param name="sender"></param> /// <param name="e"></param> privatevoidBtn_hist_clear_Click(objectsender,EventArgse) { lb_hist.Items.Clear(); } /// <summary> /// 削除ボタンクリック /// </summary> /// <param name="sender"></param> /// <param name="e"></param> privatevoidBtn_del_Click(objectsender,EventArgse) { if(lb_url.SelectedItems!=null) { lb_url.Items.RemoveAt(lb_url.SelectedIndex); } } /// <summary> /// フォーム閉じるとき /// </summary> /// <param name="sender"></param> /// <param name="e"></param> privatevoidMainForm_FormClosing(objectsender,FormClosingEventArgse) { // 設定を保存 SaveSettings(); } } } |
各処理を実装。
起動してみる
まとめ
まあ使いどころはあまりありませんが、何かのお役に立てれば。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません