Android携帯ゲームを作って世界に配信してみよう(5) ―― インターネットからデータをダウンロードするアプリを開発する
Column 1 POSTメソッドによる通信処理
今回のサンプル・コードは,HTTPプロトコルのGETメソッドによる通信を行っています.これは,ブラウザでいうと,通常のリンクをクリックした際の処理になります.このGETメソッドというのは,パラメータをすべてURLエンコードして,URLに含めてサーバに送信する形式です.
(例) http://host/path/program?param1=value1¶m2=value2
上記の例でいうと,「?」以降がパラメータであり,「<パラメータ名>=<値>」という形の組み合わせを「&」で連結しています.
ただし,GETメソッドのほかに,HTTP通信には,フォームの入力内容を送信する際などに利用する,POSTメソッドという方式があります.これは,URLではなく専用のHTTPヘッダにパラメータをエンコードしてサーバに送信する方式です.
どのような場合にPOSTメソッドを利用するとよいのでしょうか.まず,ブラウザやサーバの扱えるURLの長さには制限があることから,多数の入力項目があるフォームや,ファイルをアップロードする場合にPOSTメソッドを利用します.次に,ブラウザからサーバには遷移元のURLがReferrerというヘッダにて送信されるので,他のサーバにURLが漏れてはまずいパスワードやセッションIDなどの情報がある場合も,POSTメソッドを利用します.
●通信方法
それでは,AndroidアプリからのPOSTメソッドによる通信方法を簡単に説明します.GETメソッドによる処理の間〔リストAの(2)と(3)の間〕で,アプリからサーバにデータを送信します.
リストA POSTメソッドによる通信処理
final URLConnection connection = url.openConnection(); // (2) connection.setDoOutput(true); // (a) final OutputStream output = connection.getOutputStream(); // (b) output.write("a=b&c=d".getBytes()); // (c) output.close(); // (d) final InputStream stream = connection.getInputStream(); // (3) |
リストA(a)にて,URLConnectionクラスのsetDoOutputメソッドを呼び出し,サーバにデータを送信することを宣言します.デフォルトでは,サーバにデータを送信しないという設定になっているので,接続のたびに変更する必要があります.
次に,リストA(b)のように,URLConnectionクラスのgetOutputStreamメソッドを呼び出し,接続先のサーバへのデータ送信を管理するクラスOutputStreamを取得します.
今回は,フォーム変数aの値bと,変数cの値dをサーバに送信するとして,URLエンコードと同じようにリストA(C)のようにエンコードして,OutputStreamに書き出します.
最後に,書き出しの終了処理を行い〔リストA(d)〕,サーバからの応答を受け取ります〔リストA(3)〕.
やまだ・もとやす
スパイシーソフト(株) 代表取締役