質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

34919閲覧

C#でPOST送信、GET送信を行うプログラムを作りたい

june

総合スコア26

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1グッド

4クリップ

投稿2014/10/21 13:01

C#でPOST送信、GET送信を行うプログラムを作りたいと思い、様々なサイトを回っているのですが
僕の思っているプログラムが乗っているサイトが見つからなかったので質問させて頂きます。

内容はタイトルの通りで、C#にて、POST送信とGET送信を行うプログラムについてご教授頂きたいです。

送信する際に、複数パラメータを渡したいのでそれが出来る用にして頂ければ嬉しいです。

どうぞよろしくお願いいたします。

atsushi_yama👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

Euz_Water

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

WebClient、WebRequest でも可能ですが機能、使い勝手はHttpClientが最も優れていると思います。
HttpClient詳解、或いは非同期の落とし穴について

投稿2014/10/31 00:22

sho_cs

総合スコア3541

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問