ダウンロード サンプルファイル (8.4 KB)
httpパッケージの利用方法
dartでhttp通信を利用するには、一般的にはhttpパッケージを利用します。httpパッケージを利用する場合には、以下のようにpubspec.yamlにhttpパッケージを追加します。
dependencies: : (省略) http: ^0.13.4
httpパッケージを使ったGETリクエスト
httpパッケージを使ってGETリクエストをする場合の実装例がリスト3です。このような使い方がもっとも簡単な利用方法です。
// (1) httpパッケージのインポート処理
import 'package:http/http.dart' as http;
// : (省略)
class HttpLoginController extends ILoginController{
Map _config = {};
@override
Future config() async{
// (2) リクエストするURLの作成
var url = Uri.parse("http://hostname/config.php");
// (3) GETリクエスト
var response = await http.get(url);
// (4) ステータスコード
if(response.statusCode == 200){
// (5) 日本語が文字化けしてしまう
// _config = jsonDecode(response.body) as Map;
// (6) 日本語が含まれている場合
_config = jsonDecode(utf8.decode(response.bodyBytes)) as Map;
return Future.value(true);
}
else{
return Future.value(false);
}
}
// : (省略)
}
httpパッケージを利用するには、(1)のように名前をつけてインポートします。続いて、リクエストするURLは(2)のようにUriクラスのインスタンスを作成します。UriクラスはGETパラメータなどがある場合にはより簡単にリクエストURLの文字列が作成できるようになります。
そして、(3)でGETリクエストを送信します。また、レスポンスコードは(4)のようにstatusCodeで取得可能です。また、(5)のようにレスポンスデータの文字列はbodyで取得できます。今回のレスポンスデータはJSONデータであるため、取得したデータを(5)のようにjsonDecodeを使ってMap形式に変換します。
しかし、レスポンスデータには日本語が含まれているために、この処理では文字化けしてしまうので、bodyプロパティではなく、(6)のようにレスポンスデータのバイトデータを保持するbodyBytesを使います。このデータをutf8でデコードした文字列を使って処理するようにします。
POST処理をする
続いて、POST処理をする場合にはリスト4のように処理します。
class HttpLoginController extends ILoginController{
// (省略)
Future loginForm(String loginId, String password) async {
var url = Uri.parse("http://hostname/login/form.php");
// (1) POST処理をする
var response = await http.post(url, body : {
'login_id' : loginId,
'password' : password
},headers: {
'X-Chat-App-Key' : 'api_key'
});
// : (省略)
}
}
(1)のようにPOSTするデータはbodyに設定し、追加のヘッダがある場合には、headersに設定します。headersはGETリクエストでも利用できます。また、bodyにMap形式を使えば、自動的にリクエストするデータはapplication/x-www-form-urlencoded形式になります。
しかし、POSTデータをJSON形式、つまり、application/json形式でリクエストしたい場合に自動的に変換されるのは困ります。その場合には、リスト5のようにします。
class HttpLoginController extends ILoginController{
// (省略)
Future loginJson(String loginId, String password) async{
var url = Uri.parse("http://hostname/login/json.php");
// (1) Content-Typeを設定する
var headers = {
'Content-Type': 'application/json',
'X-Chat-App-Key' : 'api_key'
};
var body = {
'login_id' : loginId,
'password' : password
};
// (2) bodyにJSONエンコードし設定
var response = await http.post(url, body : jsonEncode(body),headers: headers);
// : (省略)
}
}
Content-Typeのヘッダ情報は(1)のように設定します。ただし、この設定処理はヘッダ情報を変更しているだけです。つまり、実装に送信するデータは(2)のように実際にjsonEncode関数を使ってエンコードしbodyに設定します。
今回はGET/POST処理だけを紹介していますが、他のメソッドも同様なので、詳しくはこちらを参照してください。
この記事は参考になりましたか?
- この記事の著者
-
WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)
< WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
