C#でPOST送信、GET送信を行うプログラムを作りたいと思い、様々なサイトを回っているのですが
僕の思っているプログラムが乗っているサイトが見つからなかったので質問させて頂きます。
内容はタイトルの通りで、C#にて、POST送信とGET送信を行うプログラムについてご教授頂きたいです。
送信する際に、複数パラメータを渡したいのでそれが出来る用にして頂ければ嬉しいです。
どうぞよろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
UTF-8が解釈できるサービスであれば、WebClientクラスを使うのもアリかと。
タイムアウト値が設定できないので、継承してタイムアウト対応させてあげたほうが汎用的に使えます。
GETにしろPOSTにしろ、NameValueCollectionの値を増やしていくだけなので、複数パラメータ対応も簡単ですよ。
イメージ的には↓みたいな感じでしょうか、動くか試していませんが。
lang
1using System; 2using System.Net; 3using System.Collections.Specialized; 4 5中略 6 7WebClient wc = new WebClient(); 8// WebClientEx wc = new WebClientEx(2000); 9 10NameValueCollection nvc = new NameValueCollection (); 11 12// パラメータ追加 13nvc.add("value1", 100); 14nvc.add("value2", 200); 15 16// POST 17byte[] resPost = wc.UploadValues("http://hogehoge.net/hoge/Service", nvc); 18 19// GET 20wc.QueryString = nvc; 21 22byte[] resGet = wc.DownloadData("http://hogehoge.net/hoge/Service"); 23 24wc.Dispose(); 25 26string resPostData = System.Text.Encoding.UTF8.GetString(resPost); 27string resGetData = System.Text.Encoding.UTF8.GetString(resGet);
タイムアウト対応したいなら↓のようなWebClientを継承したクラスを作って、コンストラクタでミリ秒してあげれば良いです。
lang
1public class WebClientEx : System.Net.WebClient 2 { 3 private int _timeout; 4 private CookieContainer cookieContainer; 5 6 public WebClientEx() 7 { 8 // 指定なしなら10秒; 9 this._timeout = 10000; 10 } 11 12 public WebClientEx(int timeout) 13 { 14 this._timeout = timeout; 15 } 16 17 public CookieContainer CookieContainer 18 { 19 get 20 { 21 return cookieContainer; 22 } 23 set 24 { 25 cookieContainer = value; 26 } 27 } 28 29 public int Timeout 30 { 31 get 32 { 33 return _timeout; 34 } 35 set 36 { 37 _timeout = value; 38 } 39 } 40 41 protected override WebRequest GetWebRequest(Uri uri) 42 { 43 WebRequest webRequest = base.GetWebRequest(uri); 44 45 webRequest.Timeout = this._timeout; 46 47 if (webRequest is HttpWebRequest) 48 { 49 HttpWebRequest httpWebRequest = (HttpWebRequest)webRequest; 50 httpWebRequest.CookieContainer = this.cookieContainer; 51 } 52 53 return webRequest; 54 } 55 }
タイムアウト値を超えると、WebExceptionが発生するので try ~ catch で何かしてあげてください。
投稿2014/10/23 03:34
総合スコア23
0
WebClient、WebRequest でも可能ですが機能、使い勝手はHttpClientが最も優れていると思います。
HttpClient詳解、或いは非同期の落とし穴について
投稿2014/10/31 00:22
総合スコア3541
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
投稿2014/10/21 13:39
総合スコア9390
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。