この前、HTTPの受信について書いたので、今度は送信について、書きます。
つまり、前はCGIをつかわないか、Get型の場合でしたので、今回はPOST型についてです。
前回同様、すでに、ここに一般的な場合について書いてあるのですが、せっかく、出力について、ここでまとめているので、今回は、その考え方にのっとり、
OutputStreamWriter(OutputStream)
の形にもっていって、そこからBufferedWriterをかぶせて使うという方法をやってみたいと思います。
なお、今回は、ここに書いたCGIを呼び出して実験しています。
■JAVAで、POST型で送受信するには
POST型でやるには、
●はじめにやること
・URLクラスを生成する
・URLクラスのgetOutputStreamメソッドでURLConnectionを取得する
・URLConnectionのsetDoOutputをtrueにする(=これで出力できる)
●送信する
・URLConnectionのgetOutputStreamで、OutputStreamを取得したら、
・あとは、OutputStreamWriter(OutputStream)にもっていけるので、
・それを使って送信し
・ここで、送信はクローズ
●受信する(前回やったとおり)
・URLConnectionのgetInputStreamで、InputStreamを取得したら、
・あとは、InputStreamReader(InputStream)にもっていけるので、
・それを使って受信し
・受信クローズ
ってことになります。
■注意点
・送信のあと、受信してください(そうしないと、正常に送信されません)
・送信後、クローズもフラッシュも、なにもしないと、BufferedWriterの場合、
送信しません
・URLConnectionは、送信と受信、同じコネクションを使います。
・URLConnectionのsetDoOutputをtrueにするのを、忘れないでね!
■サンプルプログラム
こんなかんじです。
import java.io.*; import java.net.*; public class test { public static void main(String[] args) { try { URL TestURL = new URL("http://127.0.0.1/cgi-bin/testdump.cgi"); URLConnection con = TestURL.openConnection(); // 送信するよ!指定 con.setDoOutput(true); //-------------------- //送信する //-------------------- OutputStreamWriter ow1 = new OutputStreamWriter(con.getOutputStream()); BufferedWriter bw1 = new BufferedWriter(ow1); //POSTの内容を書き出す bw1.write("test=テスト¥narg=引数"); // クローズ bw1.close(); ow1.close(); //-------------------- //受信する //-------------------- InputStreamReader ir1 = new InputStreamReader(con.getInputStream()); BufferedReader br1 = new BufferedReader(ir1); // 1行ずつ書き出す String line; while((line=br1.readLine()) != null) { //改行がカットされてるので、printlnになる。 System.out.println(line); } // クローズ br1.close(); ir1.close(); } catch(Exception e) { e.printStackTrace(); } } } |
(上記< > ¥ は、本当は半角