package ar.com.javacuriosities.networking; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; /* * URL (Uniform Resource Locator), esto es una referencia a nuestros recursos. * Esta formada por el schema/protocolo. * Los objetos URL luego de ser creados no pueden cambiar sus valores (protocol, host name, file, port) * * Formato de una URL * * <protocol>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment> * * Protocol * El protocolo de acceso * * Host Name * Nombre de la machina donde esta el recurso * * Port Number * Numero de puerto a conectarse (Opcional dependiendo el protocolo) * * Path * La ubicación del recurso * * Fragment * Una referencia hacia un nombre dentro del recurso * * La definición proviene de la RFC 2396 * * Hay una distinción entre URL y URI. Los URI definen recursos sintácticos de Internet. * Esos recursos no tienen necesidad de poseer datos que sean localizables, esa es su diferencia. * De hecho una URL es una caso de URI en el que los datos son localizables (es decir una URL hace referencia * a datos que existen, una URI es teórica, los datos podrían no existir). */ public class Step1URL { public static void main(String[] args) { try { // Creamos una URL desde un String que será parseado URL url1 = new URL("http://www.yahoo.com/resource/index.html?parameter1=value1¶meter1=value1#reference"); // Creamos una URL indicando cada una de sus partes URL url2 = new URL("http", "www.yahoo.com", 80, "index.html"); System.out.println("Informacion URL 1"); System.out.println("Protocol: " + url1.getProtocol()); System.out.println("Authority: " + url1.getAuthority()); System.out.println("Host: " + url1.getHost()); System.out.println("Port: " + url1.getPort()); System.out.println("Path: " + url1.getPath()); System.out.println("Query: " + url1.getQuery()); System.out.println("File: " + url1.getFile()); System.out.println("Informacion URL 2"); System.out.println("Protocol: " + url2.getProtocol()); System.out.println("Host: " + url2.getHost()); System.out.println("Port: " + url2.getPort()); System.out.println("Path: " + url2.getPath()); System.out.println("File: " + url2.getFile()); /* * Por medio de una URL podemos establecer una conexión y consumir su flujo de información */ URL googleURL = new URL("http://www.google.com.ar"); /* * Usamos un InputStreamReader para la conversion * entre un flujo de bytes a caracteres luego usamos * un BufferedReader para aplicar una capa de buffering sobre * el stream. * * Usamos el feature introducido en Java 7 try-with-resources */ try(BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(googleURL.openStream()))) { String inputLine; while ((inputLine = bufferedReader.readLine()) != null) { System.out.println(inputLine); } } /* * Otra opción para leer todo el input es usar la clase Scanner mas Pattern * */ // try(Scanner scanner = new Scanner(googleURL.openStream())) { // String data = scanner.useDelimiter("\\A").next(); // System.out.println(data); // } } catch (MalformedURLException e) { // Esta exception se arroja cuando se usa un protocolo no conocido o la URL no puede ser parseada // Log and Handle exception e.printStackTrace(); } catch (IOException e) { // Log and Handle exception e.printStackTrace(); } } }