4年ぶりにJavaでネットワークプログラミング。
はじめは java.net.Socket か java.net.HttpURLConnection クラスで実装しようと思っていたけど、commons にて HttpClient を発見。使ってみたら、スゲー便利。そうそう、こういうのを探してました!
ダウンロードするときは、パッケージ依存している commons-logging と commons-codecs もご一緒にどうぞ。
早速トライアルということで、POSTメソッドでIDとパスワードを送ってログインするプログラムを、Socket、HttpURLConnection、HttpClient の3つのバージョンで書いてみた。
まず、Socket の場合。あ、try ~ catch とかは省略してますんでご注意を。
String host = "localhost"; String path = "/Login.do"; String param = "id=test&pass=test"; int port = 80;
String line; Socket socket; BufferedReader reader; BufferedWriter writer;
socket = new Socket(host, port); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); writer.write("POST " + path + " HTTP/1.1\r\n"); writer.write("Host: " + host + ":" + port + "\r\n"); writer.write("Content-type: application/x-www-form-urlencoded\r\n"); writer.write("Content-length: " + param.getBytes().length + "\r\n\r\n"); writer.write(writer + "\r\n"); writer.flush();
while ((line = reader.readLine()) != null) { System.out.println(line); }
reader.close(); writer.close(); socket.close();
続いて、HttpURLConnection の場合。
String line; URL url = new URL("http://localhost/Login.do"); HttpURLConnection uc = (HttpURLConnection) url.openConnection(); uc.setRequestMethod("POST"); uc.setRequestProperty("Accept-Language", "ja"); uc.setDoOutput(true);
PrintWriter writer; BufferedReader reader;
writer = new PrintWriter(uc.getOutputStream()); writer.print("id=test&pass=test"); writer.close();
reader = new BufferedReader(new InputStreamReader(uc.getInputStream())); while ((line = reader.readLine()) != null) { System.out.println(line); }
reader.close(); uc.disconnect();
そして、HttpClient の登場。
String line; PostMethod method; BufferedReader reader;
String url = "http://localhost/Login.do"; HttpClient httpclient = new HttpClient();
method = new PostMethod(url); method.addParameter("id", "test"); method.addParameter("pass", "test"); int status = httpclient.executeMethod(method);
reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream())); while ((line = reader.readLine()) != null) { System.out.println(line); }
reader.close(); method.releaseConnection();
HttpClient では、ヘッダーやパラメータをごにょごにょすることに気を使うことが減って、見通しが良いし、コーディングもしやすい。このくらい簡単な例だとアレですが、他にも色々と細かいことができるので、かなりオススメできますよ、これは。
ちなみに、今後は HttpComponents に組み入れられて開発されていくみたい。HttpCore がベータになったら、そっちも触ってみたいな。
以上、お疲れさまでした。
このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/410