HTTP通信(S!アプリ)

サンプルソース

HttpConnection hc  =(HttpConnection)Connector.open("http://hogehoge.co.jp/");

//POSTの時だけ
//hc.setRequestMethod(HttpConnection.POST);
//hc.setRequestProperty("foo","bar");
//OutputStream os = hc.openOutputStream();
//os.write("postdata".getBytes());
//os.flush();

InputStream is = hc.openInputStream();
int length = (int)hc.getLength();
byte[] data;
if (length > 0) {
	data = new byte[length];
} else {
	data = new byte[1024];
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while ((size=is.read(data))!=-1) {
	baos.write(data,0,size);
}
baos.flush();
baos.close();
data = baos.toByteArray();

is.close();
//os.close();
hc.close();

// ※例外処理、リソースの開放は適宜実装してください

JADファイル

通信機能へのアクセスは、セキュリティに引っかかるので「MIDlet-Permissions」の記載が必要

MIDlet-Version: 1.0
MicroEdition-Profile: MIDP-2.0
MicroEdition-Configuration: CLDC-1.1
MIDlet-Permissions: javax.microedition.io.Connector.http 

結果

byte[]のdataにサーバーからのレスポンスのバイナリが格納される

解説

まず、ConnectorクラスのopenメソッドにURLを渡して、HttpConnectionインタフェースを実装したオブジェクトを取得する。

ここで、HTTPのPOSTメソッドを使用する場合は、コネクションに対してリクエストメソッドとリクエストプロパティを指定して、OutputStreamオブジェクトを通してPOSTデータを送信する。

次にHTTPヘッダ内のContent-Lengthフィールド(メッセージボディの大きさ)を元にInputStreamを通してデータを受信する。このとき、Content-Lengthフィールドを正常に取得できなければバッファに随時読み込みByteArrayOutputStreamにためる。

サーバーのMIME設定には「application/Java-archive」「application/Java」が必要らしいが、特に設定せずとも問題なく通信はできる(911Tエミュレータ動作確認)