android端末からのPOST通信は、HttpURLConnectionクラスを使用することで簡単に実現できる。
クライアント(android)
- HttpURLConnectionのインスタンスを生成する。
- インスタンスを設定する。
- BufferedOutputStreamでリクエストを送信する。
- BufferedInputStreamでレスポンスを受信する。
package net.kuttya.httppostsample;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class HttpPostSampleActivity extends Activity {
private final static String SAMPLE_URL = "http://sample.php";
private Button submitButton;
private TextView responseText;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 送信ボタン
submitButton = (Button)findViewById(R.id.main_submit);
// レスポンス表示エリア
responseText = (TextView)findViewById(R.id.main_response);
}
/*
* 送信ボタンクリック
*/
public void clickEventSubmit(View view) {
HttpURLConnection http = null; // HTTP通信
OutputStream out = null; // HTTPリクエスト送信用ストリーム
InputStream in = null; // HTTPレスポンス取得用ストリーム
BufferedReader reader = null; // レスポンスデータ出力用バッファ
byte[] requestBytes;
String result = null;
requestBytes = new byte[5];
requestBytes[0] = 0x31;
requestBytes[1] = 0x32;
requestBytes[2] = 0x33;
requestBytes[3] = 0x34;
requestBytes[4] = 0x35;
try {
// URL指定
URL url = new URL(SAMPLE_URL);
// HttpURLConnectionインスタンス作成
http = (HttpURLConnection)url.openConnection();
// POST設定
http.setRequestMethod("POST");
// HTTPヘッダの「Content-Type」を「application/octet-stream」に設定
http.setRequestProperty("Content-Type","application/octet-stream");
// URL 接続を使用して入出力を行う
http.setDoInput(true);
http.setDoOutput(true);
// キャッシュは使用しない
http.setUseCaches(false);
// 接続
http.connect();
// データを出力
out = new BufferedOutputStream(http.getOutputStream());
out.write(requestBytes);
out.flush();
// レスポンスを取得
in = new BufferedInputStream(http.getInputStream());
reader = new BufferedReader(new InputStreamReader(in));
result = reader.readLine();
// テキストエリアに表示
responseText.setText(result);
} catch(Exception e) {
e.printStackTrace();
} finally {
try {
if(reader != null) {
reader.close();
}
if(in != null) {
in.close();
}
if(out != null) {
out.close();
}
if(http != null) {
http.disconnect();
}
} catch(Exception e) {
}
}
}
}
- マニフェストファイルに下記のパーミッションを追加。
サーバ
- 今回はPHPで作成。
- HTTPリクエストを取得する。
- 取得したデータに対する処理を実施。(サンプルは受信データを送り返すだけ)
<?php
// 受信データ格納
$data = file_get_contents("php://input");
echo "POST DATA RECEIVED. data[".$data."]"
?>