% javac HttpClientHttpURLConnection.javaとコンパイルすることで HttpClientHttpURLConnection.class が生成され、
% java HttpClientHttpURLConnectionで実行できます。このプログラムは http://www.debian.org/ にアクセスし、 以下のような出力を行います。
レスポンスヘッダ: ETag: ["233112-3ea9-42284510;422847e3"] Date: [Sat, 05 Mar 2005 11:54:18 GMT] Content-Type: [text/html] null: [1.1 200 OK] (略) Content-Location: [index.ja.html] Vary: [negotiate,accept-language] レスポンスコード[200] レスポンスメッセージ[OK] ---- ボディ ---- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-2022-jp"> <title>Debian -- ユニバーサルオペレーティングシステム</title> (略)
HttpClientHttpURLConnection.java
1: import java.net.*;
2: import java.io.*;
3: import java.util.*;
4:
5: /**
6: * Java HTTP クライアントサンプル - HttpURLConnection 版 -
7: *
8: * @author 68user http://X68000.q-e-d.net/~68user/
9: */
10: public class HttpClientHttpURLConnection {
11: public static void main(String[] args)
12: throws MalformedURLException, ProtocolException, IOException {
13:
14: URL url = new URL("http://www.debian.org/");
15:
16: HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
17: urlconn.setRequestMethod("GET");
18: urlconn.setInstanceFollowRedirects(false);
19: urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");
20:
21: urlconn.connect();
22:
23: Map headers = urlconn.getHeaderFields();
24: Iterator it = headers.keySet().iterator();
25: System.out.println("レスポンスヘッダ:");
26: while (it.hasNext()){
27: String key= (String)it.next();
28: System.out.println(" " + key + ": " + headers.get(key));
29: }
30:
31: System.out.println("レスポンスコード[" + urlconn.getResponseCode() + "] " +
32: "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]");
33: System.out.println("\n---- ボディ ----");
34:
35: BufferedReader reader =
36: new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
37:
38: while (true){
39: String line = reader.readLine();
40: if ( line == null ){
41: break;
42: }
43: System.out.println(line);
44: }
45:
46: reader.close();
47: urlconn.disconnect();
48: }
49: }
14: URL url = new URL("http://www.debian.org/");
URL オブジェクトを生成します。もし URL として不正な文字列を渡した場合は、
MalformedURLException が発生します。
16: HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
17: urlconn.setRequestMethod("GET");
18: urlconn.setInstanceFollowRedirects(false);
19: urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");
URL#openConnection メソッドを呼び、HttpURLConnection オブジェクトを取得します。
そして以下の設定を行います。
21: urlconn.connect();www.debian.org のサーバに接続します。 このメソッドから帰ってきた時点で、既にサーバからのレスポンスは届いています。
23: Map headers = urlconn.getHeaderFields();
24: Iterator it = headers.keySet().iterator();
25: System.out.println("レスポンスヘッダ:");
26: while (it.hasNext()){
27: String key= (String)it.next();
28: System.out.println(" " + key + ": " + headers.get(key));
29: }
30:
31: System.out.println("レスポンスコード[" + urlconn.getResponseCode() + "] " +
32: "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]");
33: System.out.println("\n---- ボディ ----");
Content-Type などのレスポンスヘッダと、レスポンスコード・レスポンスメッセージ (200・OK など)
を表示します。ここでは全ヘッダを表示していますが、主要なヘッダであれば
HttpURLConnection クラスの getContentType・getDate などのメソッドが使えます。
ここでは HttpURLConnection#getHeaderFields メソッドを使っていますが、 これは Java 1.4 から実装されたメソッドです。Java 1.3 系以前をお使いの方は、 上記のソースをコメントアウトしてください。
35: BufferedReader reader =
36: new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
37:
38: while (true){
39: String line = reader.readLine();
40: if ( line == null ){
41: break;
42: }
43: System.out.println(line);
44: }
HttpURLConnection#getInputStream メソッドを使って、InputStream オブジェクトを取得します。
さらに InputStramReader クラスと BufferedReader クラスを経由して 1行ずつデータを取得します。
Socket クラスを使ったときと異なり、ここではボディ部しか取得できないことに注意してください。
46: reader.close(); 47: urlconn.disconnect();後始末として、BufferedReader と HttpURLConnection をクローズします。
次節でそれを実感していただきます。
ご意見・ご指摘は Twitter: @68user までお願いします。