import java.io.*;
import java.net.*;

/**
  * Il seguente programma scarica la pagina
  * www.dti.unimi.it/~sassi/index.htm
  * e la salva nel file locale paginaScaricata.htm
  *
  * @author Roberto Sassi
  * @version 1.0
  *
  */
public class GetRudimentale {
  public static void main(String[] args) throws IOException, InterruptedException {
    String nomeServer = "www.dti.unimi.it";
    Socket webSocket = null;
    PrintWriter webOut = null;
    BufferedReader webIn = null;
        
    try {
      // Crea un oggetto Socket che sia connesso al server prescelto sulla
      // porta 80
      webSocket = new Socket(nomeServer, 80);
      // "incarta" gli streams di ingresso e uscita del Socket in modo che 
      // sia più facile utilizzarli
      webOut = new PrintWriter(webSocket.getOutputStream(), true);
      webIn = new BufferedReader(new InputStreamReader(webSocket.getInputStream()));
    } 
    catch (UnknownHostException e) {
      System.err.println(nomeServer + ": server sconosciuto.");
      System.exit(1);
    } 
    catch (IOException e) {
      System.err.println(nomeServer + ": la connessione ha generato il seguente errore:");
      System.err.println(e);
      System.exit(1);
    }
  
    String webInput;
    System.out.println("(Connection to " + nomeServer + " open.)");
    boolean paginaTrovata = false;

    // Richiesta HTTP al server
    webOut.println("GET /~sassi/index.htm HTTP/1.1");
    webOut.println("Host: www.dti.unimi.it");
    webOut.println("");
    
    // Attende che il server risponda
    while( webIn.ready() == false );
      
    // Gestione minimale della risposta del Server
    // Leggiamo e scriviamo sul terminale l'header della pagina
    while( webIn.ready() ) {
      webInput = webIn.readLine();
      if( webInput.equals("") )
      {
        // L'header è finito
        break;
      }
      else if( webInput.equals("HTTP/1.1 200 OK") )
      {
        // La pagina è stata ricevuta correttamente
        paginaTrovata = true;
      }
      System.out.println(webInput);
    }

    if(paginaTrovata) {
      // Salve il corpo della risposta HTTP in un file
      File filePaginaScaricata = new File("paginaScaricata.htm");
      FileWriter writerPaginaScaricata = new FileWriter(filePaginaScaricata);
      PrintWriter streamPaginaScaricata = new PrintWriter(writerPaginaScaricata);
      while( webIn.ready() ) {
        webInput = webIn.readLine();
        streamPaginaScaricata.println(webInput);
      }
      streamPaginaScaricata.close();
    }

    webOut.close();
    webIn.close();
    webSocket.close();
    System.out.println("(Connection to " + nomeServer + " close.)");
    System.exit(0);
  }
}

