スタッフブログ

  • カテゴリ ツール の最新配信
  • RSS

HttpWebRequestでcheckboxの値をPOSTする方法

 : ツール 2009/1/5 2:55

Blogger's Avatar

セールで買ったシルバーアクセサリーの福袋が割と当たりだったhaltです.

C#のHttpWebRequestクラスを利用するとGETやPOSTによるHTTP通信を行う事ができます.以下は割と適当に書いたHttpPostを行うメソッドです.
(Cookieはメンバ変数から拾っているのでそのままでは動作しません)

第一引数に送信先のurlを指定し,第二引数に送信する内容をDictionary形式で指定する事で,データを送信する事ができます.

            private string HttpPost(string url, Dictionary<string, string> vals) {
                string param = "";
                foreach (string k in vals.Keys) {
                    string key = k.Replace("#", "");
                    param += String.Format("{0}={1}&", key, vals[k]);
                }
                byte[] data = Encoding.ASCII.GetBytes(param);

                // リクエストの作成
                System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded";
                req.ContentLength = data.Length;
                req.CookieContainer = _cookieContainer;

                // ポスト・データの書き込み
                System.IO.Stream reqStream = req.GetRequestStream();
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();

                System.Net.WebResponse res = req.GetResponse();

                // レスポンスの読み取り
                System.IO.Stream resStream = res.GetResponseStream();
                System.IO.StreamReader sr = new System.IO.StreamReader(resStream, encoder);
                string result = sr.ReadToEnd();
                sr.Close();
                resStream.Close();

                return result;
            }

ようは,送信したい値をname=value形式でつないでencodeしたものを付加するのですが,
textareaやtextboxの内容を送信する事はできるのですが,checkboxのような,一つのnameに対して複数の値を持つ要素を送信する方法がわかりません.

詳しい人に聞いてみた所,checkboxのような複数の値を持つものは,以下のように,送信する数だけname=value形式で連結すれば良いそうです.

my_check=1&my_check=2&my_check=3...

となると,キーがuniqueなDictionary形式は使えないですね.専用の構造体を作った方がいいのかもしれません.

トラックバック

スタッフブログ最新
カテゴリ一覧

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.