(本記事はVisualStudio2012RC&Windows8RPで確認しております)
今回はWebサービスからデータを取得する方法を紹介します。
Windows Phoneをはじめ.NETで利用してきたWebClientクラスはWinRTでは利用できません(HttpWebRequestは利用可能)。
その代わりにHttpClientクラスを利用します。
HttpClientはasync / awaitを使い以下のように記述できます。
var client = new HttpClient(); HttpResponseMessage response; try { response = await client.GetAsync("{URL}"); } catch (HttpRequestException) { // エラー処理 } // データを取得 var str = await response.Content.ReadAsStringAsync();
HttpClientクラスでBasic認証などのかかった通信を行う場合はAuthenticationHeaderValueクラスを利用します。
// Basic認証の場合、Base64されたID、PASSから生成した文字列を利用 var authHeader = new AuthenticationHeaderValue("Basic",System.Convert.ToBase64String(System.Text.UTF8Encoding.UTF8.GetBytes(string.Format("{0}:{1}", username, password)))); var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = authHeader; var response = await client.GetAsync("{URL}");
HttpClientクラスを利用した際に以下のようなエラーが発生しました。
“アクセス許可で禁じられたソケットにアクセスしようとしました”
エラーコードは1013
どうも192.168のローカル環境にアクセスしようとしたせいのようです。
バグといってよいのかわかりませんが、WindowsフォームアプリケーションなどでWebClientクラスを使うと同様の環境でもアクセスできたので注意です。
HttpWebRequestクラスを用いたサンプルは
MetroStyleApp入門 vol6.HTTP通信その2
を参考にしてみてください(CP版の記事ですが変更はないはずです)。
Please give us your valuable comment