/**********************************************************************************
* getURL (or any other HTTP web resource)
*
* Usage: getURL <hostname> <page>
* 
* @version 1.0
* @author Sam Sultan
**********************************************************************************/
import java.io.*;
import java.net.*;

public class getURL
{
    public static void main(String[] args)
    {
        String hostname = "";
        String page     = "";

        if (args.length > 0)        
            hostname = args[0];
        if (args.length > 1)        
            page = args[1];

        if (hostname == "") {           
            System.out.println("Usage: getURL <hostname> <page>");
            System.exit(0);
        }
        
        String sendString;                  //string to send server
        String recvString;                  //string received from server

        InetAddress serverIP;               //IP address object for server
    
        int serverPort = 80;                //default port for HTTP

        Socket TCPSocket;                   //TCP socket object

        try
        {
            serverIP   = InetAddress.getByName(hostname);   //get server hostname IP address

            TCPSocket = new Socket(serverIP,serverPort);    //establish new client socket

            InputStream       socketIn1  = TCPSocket.getInputStream();          //ref to socket input 
            InputStreamReader socketIn2  = new InputStreamReader(socketIn1);    //convert to 16 bit
            BufferedReader    socketIn   = new BufferedReader(socketIn2);       //to use readLine()

            OutputStream       socketOut1 = TCPSocket.getOutputStream();        //ref to socket output 
            OutputStreamWriter socketOut2 = new OutputStreamWriter(socketOut1); //convert to 16 bit
            BufferedWriter     socketOut3 = new BufferedWriter(socketOut2);     //buffer output
            PrintWriter        socketOut  = new PrintWriter(socketOut3);        //to use println()

            /*------------------ send data ---------------------------*/
    
            sendString = "GET /" + page + " HTTP/1.0";      //create a "GET" request

            System.out.println(sendString);                 //print on screen
            System.out.println();

            socketOut.println(sendString);                  //send data thru the socket     
            socketOut.println();                            //empty line (required)
            socketOut.flush();                              //flush buffer

            System.out.println("Waiting for server... \n"+ TCPSocket);
            System.out.println();

            /*------------------ receive data -------------------------*/
    
            while((recvString = socketIn.readLine()) != null)    //receive from socket    
                System.out.println(recvString);
         
            System.out.println();
        }

        catch(UnknownHostException e)
        {
            System.out.println("Unknown host: " + hostname);
            System.exit(-1);
        }

        catch(IOException e)
        {   
            System.out.println("I/O error: " + e.toString());
            System.exit(-1);
        }
    }
}