値をPOSTする
先ほどのサンプルはサーバーから値を取得(GET)して来ました。
今度はサーバーに何等かの値を送りたい(POST)場合の処理を見ていきましょう(HttpRequestSample_002.zip)。
ストアアプリの画面を通してユーザーが「リンゴを2つと、みかんを1つ選択した」というケースを想定します。
サーバー側のコード
サーバー側はPHPという言語を用いて、以下のように記述されていることとします。
<?php if (!empty($_POST)) { $apple = $_POST["apple"]; $orange = $_POST["orange"]; echo "リンゴ:". intval($apple). "個"; echo "\n"; echo "みかん:". intval($orange). "個"; } ?>
ポストされた値($_POST)からリンゴ(apple)とみかん(orange)を取り出して出力しているだけです。
サーバー側の言語としてPHPを選んだのは、サーバー側のコードはC#でなくても良いことと、サーバー側はPHPなどのオープンソース系の言語で書かれていることが多いという理由からです。
ストアアプリ側のコード
ストアアプリ側は以下のコードで値をPOSTします。
HttpClient client = new HttpClient(); String url = "http://coelacanth.heteml.jp/sample/codezine/postsample.php"; // POSTする内容 var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("apple", "2"), new KeyValuePair<string, string>("orange", "1") }); HttpResponseMessage message; String responseString; try { message = await client.PostAsync(url, content); responseString = await message.Content.ReadAsStringAsync(); this.resultTextBox.Text = responseString; } catch { // 例外が発生した場合の処理を記述していく }
コードの説明
FormUrlEncodedContent
FormUrlEncodedContentクラスでPOSTする値を定義します。サンプルではKeyValuePairを用いてappleというキーに2を、orangeというキーに1を指定しています。
PostAsyncメソッド
一つ前のサンプルはGetAsyncでしたが今回はPostAsyncメソッドを使います。PostAsyncは第2引数にPOSTする値(FormUrlEncodedContentクラス)を取ります。
サンプルを実行すると、以下のような結果を得られます。
ヘッダーを指定する
HTTP通信のヘッダー情報を編集したい場合は以下のように行います(HttpRequestSample_003.zip)。
HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Add("user-agent", "xbox-wow");
上記通信をFiddlerで確認すると、以下のようにuser-agentに「xbox-wow」が指定されているのが分かります。