Shammer's Philosophy

My private adversaria

URLConnection sample

build.xml と一緒に。いつの日か、コピペで使えるように。まずは build.xml

<?xml version="1.0" encoding="UTF-8"?>

<project name="URLClient" default="jar" basedir=".">

  <property name="src" value="src"/>
  <property name="class" value="class"/>
  <property name="javadoc" value="api"/>
  <property name="version" value="1.0.0"/>
  <property name="build.jar" value="URLClient-${version}.jar"/>

  <target name="jar" depends="compile">
    <jar jarfile="${build.jar}" basedir="${class}"/>
  </target>

  <target name="compile">
    <mkdir dir="${class}" />
    <!-- このサンプルでは使用しないが今後テンプレートにするため定義(Tomcatを想定) -->
    <path id="myclasspath">
      <fileset dir="lib">
        <include name="*.jar"/>
      </fileset>
      <pathelement path="${catalina.home}/commons/lib/servlet.jar"/>
    </path>

    <javac srcdir="${src}" destdir="${class}" encoding="UTF-8" classpathref="myclasspath"/>
  </target>

  <target name="javadoc">
    <javadoc packagenames="*" sourcepath="${src}" destdir="${javadoc}"/>
  </target>

  <target name="clean">
    <delete dir="${class}" />
    <delete file="${build.jar}" />
  </target>

  <target name="run">
    <java classname="URLClient" classpath="${build.jar}">
      <arg value="localhost"/>
    </java>
  </target> 

</project>

ソースコード。例によって引数は一つしか使わないが、今後のために。

import java.net.*;
import java.io.*;
import java.util.*;

public class URLClient {
    public static void main(String[]args)throws Exception {
	
	String host = null;
	String param1 = null;
	String param2 = null;
	
	if ( args.length == 1 || args.length == 3 ) {
	    host = args[0];
	    param1 = (args.length == 3) ? args[1] : "param1";
	    param2 = (args.length == 3) ? args[2] : "param2";
	}
	else {
	    System.out.println("Usage: java URLClient host");
	    System.out.println("       java URLClient host param1 param2");
	    System.exit(1);
	}
	URL url = new URL("http://" + host + "/");
	HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
	urlconn.setRequestMethod("GET");
	urlconn.setInstanceFollowRedirects(false);
	urlconn.connect();

	Map<String,List<String>> headers = urlconn.getHeaderFields();
	Iterator<String> iterator = headers.keySet().iterator();
	System.out.println("Response Headers:");
	while (iterator.hasNext()) {
	    String key = iterator.next();
	    System.out.println("  " + key + ":" + headers.get(key));
	}

	System.out.println("Response Code : " + urlconn.getResponseCode());
	System.out.println("Body          : ");

	BufferedReader reader = new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
	while (true) {
	    String line = reader.readLine();
	    if (line == null) break;
	    System.out.println(line);
	}
	reader.close();
	urlconn.disconnect();
    }
}

ほとんどJava で HTTP クライアントを作ってみよう (2)のコピーだが。ありがとうございます。