Java: lectura de una URL usando la clase URLConnection

URLConnection es una clase abstracta cuyas subclases forman el enlace entre la aplicación del usuario y cualquier recurso en la web. Podemos usarlo para leer/escribir desde/hacia cualquier recurso referenciado por un objeto URL. Hay principalmente dos subclases que amplían la clase URLConnection

  • HttpURLConnection: si nos conectamos a cualquier URL que use «http» como protocolo, entonces se usa la clase HttpURLConnection.
  • JarURLConnection: Sin embargo, si estamos tratando de establecer una conexión a un archivo jar en la web, entonces se utiliza JarURLConnection.

Una vez que se establece la conexión y tenemos un objeto URLConnection, podemos usarlo para leer o escribir u obtener más información sobre cuándo se modificó por última vez la página/archivo, la longitud del contenido, etc. 

Pero apenas obtener la información del estado no es el verdadero motivo de una aplicación del mundo real. Nuestro objetivo es recuperar la información, procesarla y enviar los resultados al servidor, o simplemente mostrar la información requerida recuperada del servidor. 

Ilustración:

Aplicación a pequeña escala que solicita el nombre de una película al usuario y, a su vez, devuelve la calificación «IMDb» de la película o devuelve todos los enlaces relacionados con esa película. Todo esto se puede lograr utilizando la clase URLConnection.

Métodos de la clase URLConnection

Método Acción realizada
obtener el contenido() Recupera el contenido de URLConnection
getContentEncoding() Devuelve el valor del campo de encabezado de codificación de contenido.
getContentLength() Devuelve la longitud del campo de encabezado de contenido
obtener la fecha() Devuelve el valor de la fecha en el campo de encabezado
getHeaderFields() Devuelve el mapa que contiene los valores de varios campos de encabezado en el encabezado HTTP
getHeaderField(int i) Devuelve el valor del i -ésimo índice del encabezado
getHeaderField(campo de string) Devuelve el valor del campo denominado «campo» en el encabezado
getInputStream() Devuelve el flujo de entrada a esta conexión abierta dentro de la clase OutputStream
getOutputStream() Devuelve el flujo de salida a esta conexión de la clase OutputStream
abrirConexión() Abre la conexión a la URL especificada.
setAllowUserInteraction() Establecer esto como verdadero significa que un usuario puede interactuar con la página. El valor por defecto es verdadero.
setDefaultUseCaches() Establece el valor predeterminado del campo useCache como el valor dado.
setDoInput() Establece si el usuario puede tomar entrada o no
setDoOutput() Establece si el usuario puede escribir en la página. El valor predeterminado es falso ya que la mayoría de las URL no permiten escribir

Ahora, después de comprender los métodos Pasos involucrados en el proceso anterior 

  1. Creación de URL: cree un objeto de URL utilizando cualquiera de los constructores dados
  2. Crear objeto: invoque la llamada openConnection() para crear el objeto de URLConnection.
  3. Mostrar el contenido: use el objeto creado anteriormente para mostrar la información sobre el recurso o para leer/escribir el contenido del archivo en la consola usando bufferedReader e InputStream de la conexión abierta usando el método getInputStream().
  4. Cerrar flujo: cierre el flujo de entrada cuando haya terminado.

Implementación: veamos un programa de muestra, que utiliza los métodos anteriores para mostrar los campos de encabezado y también imprimir el código fuente de toda la página en la ventana de la consola.

Java

// Java Program to Illustrate Reading and Writing
// in URLConnection Class
  
// Importing required classes
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
  
// Class
// URLConnectionclass
class GFG {
    // main driver method
    public static void main(String[] args)
    {
  
        // Try block to check for exceptions
        try {
  
            // Fetching URL by creating
            URL url = new URL(
                "https://www.geeksforgeeks.org/java");
  
            // Opening the connection to the above URL
            URLConnection urlcon = url.openConnection();
  
            // Executing the below line would print the
            // value of
            // Allow User Interaction field.
            // System.out.println(urlcon.getAllowUserInteraction());
  
            // Executing the below line would print
            // the value of Content Type field.
            // System.out.println(urlcon.getContentType());
  
            // Executing the below line would print the
            // value
            // of URL of the given connection.
            // System.out.println(urlcon.getURL());
  
            // Executing the below line would
            // print the value of Do Input field.
            // System.out.println(urlcon.getDoInput());
  
            // Executing the below line would
            // print the value of Do Output field.
            // System.out.println(urlcon.getDoOutput());
  
            // Executing the below line would
            // print the value of Last Modified field.
            // System.out.println(new
            // Date(urlcon.getLastModified()));
  
            // Executing the below line would
            // print the value of Content Encoding field.
            // System.out.println(urlcon.getContentEncoding());
  
            // To get a map of all the fields of http header
            Map<String, List<String> > header
                = urlcon.getHeaderFields();
  
            // Printing all the fields along with their
            // value
            for (Map.Entry<String, List<String> > mp :
                 header.entrySet()) {
                System.out.print(mp.getKey() + " : ");
                System.out.println(
                    mp.getValue().toString());
            }
  
            System.out.println();
            System.out.println(
                "Complete source code of the URL is-");
            System.out.println(
                "---------------------------------");
  
            // Getting the inputstream of the open
            // connection
            BufferedReader br
                = new BufferedReader(new InputStreamReader(
                    urlcon.getInputStream()));
            String i;
  
            // Printing the source code line by line
            while ((i = br.readLine()) != null) {
  
                System.out.println(i);
            }
        }
  
        // Catch block to handle exceptions
        catch (Exception e) {
  
            // Displaying exceptions
            System.out.println(e);
        }
    }
}

Producción: 

Keep-Alive   :   [timeout=5, max=100]
null   :   [HTTP/1.1 200 OK]
Server   :   [Apache/2.4.18 (Ubuntu)]
Connection   :   [Keep-Alive]
Last-Modified   :   [Wed, 16 Nov 2016 06:49:55 GMT]
Date   :   [Wed, 16 Nov 2016 10:58:34 GMT]
Accept-Ranges   :   [bytes]
Cache-Control   :   [max-age=3]
ETag   :   ["10866-541657b07e4d7"]
Vary   :   [Accept-Encoding]
Expires   :   [Wed, 16 Nov 2016 10:58:37 GMT]
Content-Length   :   [67686]
Content-Type   :   

Complete source code of the URL is-
--------------------------------------------------

...source code of the page...

Este artículo es una contribución de Rishabh Mahrsee . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *