HttpConnectionでのレスポンス取得について


HttpConnectionインタフェースを用いてHTTPのGETメソッドでサーバと通信するときの典型的なシーケンスでは、Connector.open()を用いてHttpConnectionをオープンした後、サーバからのレスポンスデータを読み込むためにopenInputStream()によってInputStreamを取得したり、getResponseCode()によってレスポンスヘッダのステータスコードを取得します。そしてHTTP接続を切断するためにInputStreamとHttpConnectionをクローズします。

一方、たとえばサーバからのレスポンスをチェックしないようなやり取りを独自に規定した場合、HttpConnectionに送信データを書き込むだけで、レスポンスに関する情報を要求せずにHTTP接続を切断するようなプログラムを作成しがちです。以下に例を示します。


HttpConnection hc;
OutputStream os;
byte[] data;
    . . .                       //送信データをdataに設定
    hc = (HttpConnection)Connector.open( "http://..." );  
                                // HttpConnectionを取得
    os = hc.openOutputStream(); // OutputStreamの取得
    os.write( data );           //送信データのOutputStreamへの書き込み
    os.close();                 // OutputStreamをクローズ
                                // ここで通信結果に関する情報を要求していない
    hc.close();                 // HttpConnectionをクローズ

上記の例では、送信データをOutputStreamに書き込んだだけでOutputStreamおよびHttpConnectionをクローズしています。このシーケンスではHttpConnectionはHTTP通信を行うことが保証されません。たとえレスポンスデータを受け取らない場合でも、HTTP通信するためには通常のHTTP通信での処理と同様にgetResponseCode() メソッドによってサーバからの応答を確認してください。以下に例を示します。


HttpConnection hc;
OutputStream os;
byte[] data;
int rc;                         //HTTP レスポンスコード
. . .                           //送信データをdataに設定
    hc = (HttpConnection)Connector.open( "http://..." );  
                                // HttpConnectionを取得
    os = hc.openOutputStream(); // OutputStreamの取得
    os.write( data );           //送信データのOutputStreamへの書き込み
    os.close();                 // OutputStreamをクローズ
    rc = hc.getResponseCode()   // レスポンスコードを取得する。ここでHTTP通信が行われる。
    hc.close();                 // HttpConnectionをクローズ