値を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」が指定されているのが分かります。
