Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre como Java puede utilizar la URL, Localizador de Recurso Uniforme por sus siglas en Ingles, el cual es un metodo utilizado ampliamente en Internet tanto para identificar una pagina web como un sitio FTP, su sintaxis es la siguiente:

protocolo://host[:puerto]/path[?query][#ref]
Anuncios

El protocolo es uno de los estandares usados hoy en dia como HTTP, HTTPS, FTP, etc, host es la direccion del servidor, puede ser un nombre o una direccion IP, el puerto es opcional sino se especifica se utilizara el puerto predeterminado del protocolo (p.e. HTTP = 80), path va a ser la ubicacion exacta de nuestro archivo o pagina, query es opcional y se usa para enviar parametros lo mismo ocurre con ref donde es opcional y sirve para buscar esa referencia en la pagina o archivo, un ejemplo de URL es el siguiente:

https://www.tutorialspoint.com/java/java_url_processing.htm

Anuncios

Hablemos sobre la clase URL, java.net.URL, la cual nos permitira manipular las urls en Java, primero veremos una descripcion sobre los constructores de esta clase:

  • public URL(String protocolo, String Host, int puerto, String archivo) throws MalformedURLException, crea un URL con la informacion dada
  • public URL(String protocolo, String Host, String archivo) throws MalformedURLException igual al anterior pero utiliza el puerto por defecto del protocolo
  • public URL(String url) throws MalformedURLException, crea un URL desde la informacion dada
  • public URL(URL contexto, String url) throws MalformedURLException, crea una URL pasando junto la URL y los argumentos de tipo String

Con nuestro objeto creado dispondremos de los siguientes metodos para poder trabajarlo, veamos un listado de algunos de los disponibles:

Anuncios
  • public String getPath(), devuelve el path de un URL
  • public String getQuery(), devuelve la parte de query de un URL
  • public String getAuthority(), devuelve la autoridad (dominio) de la URL
  • public int getPort(), devuelve el puerto de la URL
  • public int getDefaultPort(), devuelve el puerto del protocolo por defecto de la URL
  • public String getProtocol(), devuelve el protocolo de la URL
  • public String getHost(), devuelve el host de la URL
  • public String getFile(), devuelve el nombre del archivo de la URL
  • public String getRef(), devuelve la parte de referencia de la URL
  • public URLConnection openConnection() throws IOException, genera una conexion a la URL permitiendo al usuario conectarse con el recurso
Anuncios

Veamos un ejemplo para aplicar los metodos:

DemoURL.java

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

public class DemoURL
{
        public static void main(String[] args)
        {
          try
          {
            URL url=new URL("https://www.example.org/index.html?leng=es#java");
            System.out.println("URL es " + url.toString());
            System.out.println("Protocolo es " + url.getProtocol());
            System.out.println("Autoridad es " + url.getAuthority());
            System.out.println("Archivo es " + url.getFile());
            System.out.println("Host es " + url.getHost());
            System.out.println("Path es " + url.getPath());
            System.out.println("Puerto es " + url.getPort());
            System.out.println("Puerto por defecto es " + url.getDefaultPort());
            System.out.println("Query es " + url.getQuery());
            System.out.println("Referencia es " + url.getRef());
          }
          catch (IOException e)
          {
            e.printStackTrace();
          }
        }
}
Anuncios

En este ejemplo utilizaremos los paquetes de java.net y java.io, luego crearemos un objeto de tipo URL con esa direccion de ejemplo, las siguientes lineas se utilizaran para descomponer nuestra URL con los distintos metodos antes vistos, en este caso separaremos la autoridad, el host, el puerto, el query, la referencia, etc, probemos de compilarlo y ejecutemos el programa para ver su salida:

tinchicus@dbn001vrt:~/programacion/java/codigo$ java DemoURL
URL es https://www.example.org/index.html?leng=es#java
Protocolo es https
Autoridad es www.example.org
Archivo es /index.html?leng=es
Host es www.example.org
Path es /index.html
Puerto es -1
Puerto por defecto es 443
Query es leng=es
Referencia es java
tinchicus@dbn001vrt:~/programacion/java/codigo$
Anuncios

Observen como se descompuso la URL en distintas partes pero veamos la mas caracteristica como en esta URL no informamos ningun puerto al momento de traerlo por medio de getPort() nos devolvio un -1, en cambio el getDefaultPort() si nos trajo el puerto correcto, ahora hablemos sobre la clase URLConnections.

Anuncios

Esta clase es de tipo abstracta y es utilizada en el metodo openConnection() como tipo de objeto devuelto y a su vez es utilizada por medio de esta, y sus subclases, para representar los distintos tipos de URL, algunos de los metodos disponibles para esta clase son los siguientes:

  • Object getContent(), recupera el contenido de la conexion URL
  • Object getContent(Clase[] clases), similar al anterior
  • String getContentEncoding(), devuelve el valor de la codificacion de contenido del campo de encabezado
  • int getContentLength(), devuelve el valor de la longitud de contenido del campo de encabezado
  • String getContentType(), devuelve el valor del tipo de contenido del campo de encabezado
  • int getLastModified(), devuelve el valor de la ultima modificacion del campo de encabezado
  • long getExpiration(), devuelve el valor de la expiracion del campo de encabezado
  • long getIfModifiedSince(), devuelve el valor del campo ifModifiedSince de este objeto
  • public void setDoInput(boolean entrada), pasa en verdadero para indicar que la conexión se utilizará para la entrada. El valor predeterminado es verdadero porque los clientes normalmente leen desde un URLConnection
  • public void setDoOutput(boolean salida), pasa en verdadero para indicar que la conexión se utilizará para la salida. El valor predeterminado es falso porque muchos tipos de URL no admiten la escritura
  • public InputStream getInputStream() throws IOException, devuelve el stream de entrada de la conexion URL para leerla desde el recurso
  • public OutputStream getOutputStream() throws IOException, deveulve el stream de salida de la conexion URL para escribir en el recurso
  • public URL getURL(), devuelve la URL a la cual la URLConnection esta conectada
Anuncios

Veamos un ejemplo de como aplicar los metodos de esta clase:

DemoURLConn.java

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

public class DemoURLConn
{
  public static void main(String[] args)
  {
    try
    {
        URL url = new URL("http://www.example.org");
        URLConnection urlConnection = url.openConnection();
        HttpURLConnection conexion = null;
        if (urlConnection instanceof HttpURLConnection)
        {
                conexion = (HttpURLConnection) urlConnection;
        } else {
                System.out.println("Por favor ingrese un HTTP URL");
                return;
        }

        BufferedReader entrada = new BufferedReader(
                        new InputStreamReader(conexion.getInputStream()));
        String urlString="";
        String actual;

        while((actual = entrada.readLine()) != null)
        {
                urlString += actual;
        }
        System.out.println(urlString);
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
  }
}
Anuncios

En este ejemplo como en el anterior usaremos a java.net y java.io, despues crearemos un objeto llamado url donde le ingresaremos una direccion web, http://www.example.org, para luego crear nuestra urlConnection la cual abrira por medio del metodo openConnection() la url informada previamente en url, chequeara si urlConnection es una instancia de HttpURLConnection y en caso de ser verdadero se la asignara a una variable llamada conexion, creada previamente al condicional, de lo contrario nos devolvera un mensaje y retornara, si todo esta correcto crearemos un objeto llamado entrada de la clase BufferedReader a la cual por medio de InputStreamReader le diremos que consiga el stream de entrada de nuestra conexion, crearemos dos variables de tipo String, despues por medio de un bucle while leeremos el contenido de nuestro stream y mientras actual sea distinto de null se lo agregaremos a la variable urlString, una vez terminado el bucle mostraremos el resultado en pantalla, el metodo try/catch no lo comento porque es lo que vinimos bien ultimamente, compilemos el programa y ejecutemos el mismo para ver su salida:

tinchicus@dbn001vrt:~/programacion/java/codigo$ java DemoURLConn
<!doctype html><html><head>    <title>Example Domain</title>    <meta charset="utf-8" />    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />    <meta name="viewport" content="width=device-width, initial-scale=1" />    <style type="text/css">    body {        background-color: #f0f0f2;        margin: 0;        padding: 0;        font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;            }    div {        width: 600px;        margin: 5em auto;        padding: 50px;        background-color: #fff;        border-radius: 1em;    }    a:link, a:visited {        color: #38488f;        text-decoration: none;    }    @media (max-width: 700px) {        body {            background-color: #fff;        }        div {            width: auto;            margin: 0 auto;            border-radius: 0;            padding: 1em;        }    }    </style>    </head><body><div>    <h1>Example Domain</h1>    <p>This domain is established to be used for illustrative examples in documents. You may use this    domain in examples without prior coordination or asking for permission.</p>    <p><a href="http://www.iana.org/domains/example">More information...</a></p></div></body></html>
tinchicus@dbn001vrt:~/programacion/java/codigo$

Como pueden ver nos trajo toda la informacion de la pagina, sin discriminar absolutamente nada.

Anuncios

En resumen, hoy hemos visto como procesar direcciones URL por medio de Java, como podemos conectarnos, como podemos desarmarlas para obtener los datos de la misma, como conectarnos a una direccion especifica y obtener informacion del destino, ejemplos de cada clase, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00