JAVAの入出力について、ファイル以外ということで、今日はHTTPそれも、受信について考えてみたいと思います。つまり、CGIをつかわないか、Get型の場合ということです。
送信(書き出し)も含むPOSTについては、次回のこのシリーズで書きます。
(いろいろ注意点アリ。ただし、その前に受信の方法がわかんないと。。)
で、一般的な(POSTの場合の)HTTP通信のソースは、
ここ http://www.geocities.jp/xmldtp/jv_post.htm
に、すでに書いてあるので、こちらを見てください。
今回は、この方法でもいいんですけど、せっかく、入力について、ここでまとめているので、今回は、その考え方にのっとり、
InputStreamReader(InputStream);
の形にもっていって、そこからBufferedReaderをかぶせて使うという方法をやってみたいと思います。
■HTTPにおけるInputStreamの生成
この方法の場合、InputStreamをとってくることになりますが、InputStreamは、URLConnectionクラスの、getInputStream()で取得できます。
このURLConnectionを取得するには、URLクラスの、openConnection()をしなければいけません。
そして、URLクラスを生成する際に、見たいURLを指定します。
ここまでをまとめ、YAHOO(http://www.yahoo.co.jp)について、BufferedReaderまでをつくると、こんなかんじです。
URL TestURL = new URL("http://www.yahoo.co.jp");
URLConnection con = TestURL.openConnection();
InputStreamReader ir1 = new InputStreamReader(con.getInputStream());
BufferedReader br1 = new BufferedReader(ir1);
あとは、ファイルの読み込みと同じ方法でできます。
ただし、このとおりにやると、ちょっとまずいことが起こります。
■コード変換をInputStreamReaderで行える
そのまずいことというのは、YAHOOの場合、EUCコードなんです。
なので、もじばけばけででてきます。
で、コード変換はどーするか?
っていうと、EUCとわかっているなら、InputStreamReaderでできます。
InputStreamReaderのところを
InputStreamReader ir1 = new InputStreamReader(con.getInputStream());
ではなく
InputStreamReader ir1 = new InputStreamReader(con.getInputStream(),"EUC_JP");
と、コードをつけてやると、コード変換してくれます。
■ソース
これらをまとめると、以下のとおりになります。
●仕様
YAHOO(http://www.yahoo.co.jp) のソースをコンソールに出す。
●ソースコード
import java.io.*; import java.net.*; public class test { public static void main(String[] args) { try { URL TestURL = new URL("http://www.yahoo.co.jp"); URLConnection con = TestURL.openConnection(); //-------------------- //受信する //-------------------- InputStreamReader ir1 = new InputStreamReader(con.getInputStream(),"EUC_JP"); BufferedReader br1 = new BufferedReader(ir1); // 1行ずつ書き出す String line; while((line=br1.readLine()) != null) { System.out.println(line); } // クローズ br1.close(); ir1.close(); } catch(Exception e) { e.printStackTrace(); } } } |
(上記 < > ¥ は、本当は半角です)