import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.PrintWriter;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.URLEncoder;
import java.net.UnknownHostException;
import java.util.StringTokenizer;



public class HttpGet1{
	private final static int HOST_INDEX    = 0;
	private final static int PATH_INDEX    = 1;
	private final static int WWW_PORT      = 80;
	private final static String HTTP_VER   = "HTTP/1.0";
	private final static String PATH_DELIM = "/";



	private int handleException(Exception e){
		if(e instanceof SecurityException){
			System.out.println("SecurityException: Operation not allowed");
		}

		if(e instanceof IOException){
			System.out.println("IOException: I/O error");
		}

		if(e instanceof UnknownHostException){
			System.out.println("UnknownHostException: IP address of the host could not be determined");
		}

		System.out.println("Returning -1");
		return -1;
	}



	private void sendGetRequest(String path, BufferedWriter out) throws IOException{
		String getRequest = "GET " + path + " " + HTTP_VER + "\r\n\r\n";

		out.write(getRequest);
		out.flush();
	}



	private String getFilenameFromPath(String path){
		int tokenCounter       = 0;
		String filename        = "";
		StringTokenizer strtok = new StringTokenizer(path, PATH_DELIM);
		
		tokenCounter = strtok.countTokens();
		for(int i = 0; i < (tokenCounter-1); i++)
			strtok.nextToken();

		filename = strtok.nextToken();
		return filename;		
	}



	private void receiveGetResponse(String path, BufferedReader in) throws IOException{
		boolean afterFirstEmptyLine = false;
		String line                 = "";
		String filename             = getFilenameFromPath(path);
		File file                   =  new File(filename);
		file.createNewFile();

		PrintWriter pw     = new PrintWriter(filename);

    	while ((line = in.readLine()) != null) {
			if(line.equals("") && !afterFirstEmptyLine){
				afterFirstEmptyLine = true;
				continue;
			} 
			
			if(afterFirstEmptyLine){
				pw.println(line);
			}		
		}
		pw.close();				
	}



	public int start(String[] argv){
		try{
			Socket socket = new Socket(argv[HOST_INDEX], WWW_PORT);

			BufferedReader in = 
				new BufferedReader(new InputStreamReader(socket.getInputStream()));

			BufferedWriter out = 
				new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 

			sendGetRequest(argv[PATH_INDEX], out);
			receiveGetResponse(argv[PATH_INDEX], in);

			in.close();
			out.close();
		}

		catch(Exception e){
			return handleException(e);
		}

		return 0;
	}



	public static void main(String[] argv){
		HttpGet1 get = new HttpGet1();
		System.exit(get.start(argv));
	}
}
