今更ながらの、HttpURLConnection POST編

POST

こちらもまずは、サンプルソース

GET編と同様、必要最低限のことを行う、サンプルソースです。アプリやサーバ内で使用することを想定した作りとなっています。

GET編のサンプルに有ったおまけみたいなものは省いていますが、コンパイルするためには必要です。

GET編との違いは、メソッド名の他にはまず、第2引数として文字列のpostDataが追加になっています。この引数は、URLエンコード済みの文字列を想定しています。

そして、10行目から17行目が追加となっています。

肝は10行目で、このURLConnectionで出力を行う場合にtrueを設定します。これにより、POSTメソッドで通信を行うことになります。

13,14行目で、出力用のストリームを取得し、送信用の文字列をバイトに変換して出力しています。引数なしのgetBytesを使用すると、エンコードが環境のデフォルトとなり、ソースの静的解析ツールに怒られるので、ISO8859_1(Latin-1)を使用しています。デフォルトがUTF-16となっているような、ごく特殊な環境以外では問題ないんですけどね。

何が起きているかはシーケンスで

当然のことですが、出力用のストリームを取得する時点でサーバとの接続を行います。

その後、アプリケーション上でデータを出力して出力用のストリームを閉じ、入力用のストリームを取得すると、処理がブロックされます。

このとき、ネットワーク上では、出力データを含むリクエストを投げレスポンスを取得後、サーバからの切断指示を受信した時点でブロックを抜け、アプリケーション側に制御が返ります。

これ以降は、Getメソッドでの通信と同じです。

HTTP Post に於ける、ネットワーク上のシーケンス

他の関連ドキュメント

1.今更ながらの、HttpURLConnection Get編

2.今更ながらの、HttpURLConnection Post編

3.今更ながらの、HttpURLConnection 障害処理編

4.今更ながらの、HttpURLConnection (やっと)HttpURLConnectionを使う編