Clase Java.net.HttpURLConnection en Java

La clase HttpURLConnection es una clase abstracta que se extiende directamente desde la clase URLConnection . Incluye toda la funcionalidad de su clase principal con características adicionales específicas de HTTP. HttpsURLConnection es otra clase que se usa para el protocolo HTTPS más seguro. 

Es una de las opciones populares entre los desarrolladores de Java para interactuar con servidores web y el equipo de desarrollo de Android ha sugerido oficialmente usarlo siempre que sea posible. Más adelante, ilustraremos una implementación simple de una aplicación interactiva que usa la API de emociones de Microsoft para recuperar las puntuaciones de emoción de una imagen usando métodos de la clase HttpURLConnection.

Constructor

  • HttpURLConnection(URL u): construye la conexión httpurl a la URL especificada

Métodos (aparte de la clase URLConnection)

Método Acción realizada
desconectar() Indicó que las requests al servidor son muy poco probables en el futuro. 
getErrorStream() Obtiene el flujo de error si el servidor no se puede conectar o si se produjo algún error. Puede contener información sobre cómo corregir el error del servidor.
getFollowRedirects() Devuelve verdadero o falso dependiendo de la redirección automática o no.
getHeaderField() Devuelve el campo de encabezado n, o nulo si no existe. Anula el método getHeaderField de la clase URLConnection.
getInstanceFollowRedirects() Devuelve verdadero o falso dependiendo de si la redirección automática de instancias está configurada o no.
obtener permiso() Recupera el permiso requerido para conectarse a un host y puerto de destino.
obtener código de respuesta() Se utiliza para recuperar el estado de respuesta del servidor.
obtener mensaje de respuesta() Recupera el mensaje de respuesta.
getRequestMethod() Devuelve el método de solicitud.
setInstanceFollowRedirects() Establece si las requests de código de respuesta se redirigen automáticamente por esta instancia de conexión URL HTTP. Anula el setFollowRedirects() más genérico
setRequestMethod() Se utiliza para establecer el método de solicitud. El valor predeterminado es OBTENER
establecerFixedLengthStreamingMode() Se utiliza para establecer la longitud del contenido escrito en el flujo de salida si se conoce de antemano.
setSeguir redireccionamientos() Establece si una solicitud de código de respuesta 3xx se redirigirá automáticamente o no.
setChunkedStreamingMode() Se utiliza cuando se desconoce la longitud del contenido. En lugar de crear un búfer de longitud fija y escribirlo en un servidor, el contenido se divide en fragmentos y luego se escribe. No todos los servidores admiten este modo. 
usandoProxy() Devuelve verdadero si la conexión se establece mediante un proxy; de lo contrario, devuelve falso

Sugerencia: sería bueno comprender cómo leer la URL usando esta clase HttpURLConnection para comprender mejor la implementación a continuación.

Ilustración: Todo el proceso se puede entender en pocas palabras de la siguiente manera: 

Conexión al servidor de la API de emoción de Microsoft utilizando la siguiente URL 

https://westus.api.cognitive.microsoft.com/emotion/v1.0/recognize

Establecer las propiedades y métodos para activar la solicitud: en este paso, establecemos los métodos y propiedades de nuestro objeto de solicitud. Primero, configuramos el método como un método de solicitud para ser invocado como POST. También configuramos la propiedad User-Agent para garantizar que el servidor no bloquee nuestra solicitud debido a un tipo de respuesta inesperado que, de lo contrario, funcionaría bien en cualquier navegador web.

Activar la solicitud de obtención de http: después de haber creado la URL y haber creado un objeto HttpURLConnection, tenemos que activar una solicitud. Se puede hacer explícitamente mediante el método connect(). Se hace implícitamente cada vez que intentamos usar cualquier mensaje de respuesta como getOutputStream(), etc.

Escritura en el servidor: una vez que obtenemos el flujo de salida en el servidor, cargamos nuestra imagen en el servidor para su procesamiento.

Lectura de la respuesta del servidor: después de obtener un flujo de entrada, usamos el lector almacenado en búfer para generar los resultados del servidor.

Implementación: 

Java

// Java Program to Illustrate Use
// of HttpURLConnection Class
// to Retrieve Emotion score of Image
// Using Microsoft Emotion API
 
// Importing required classes
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.simple.JSONObject;
 
// Main class
// httpconclass class
public class GFG {
 
    // Main driver method
    public static void main(String args[])
        throws IOException
    {
 
        // Reading input via BufferedReader class
        BufferedReader br = new BufferedReader(
            new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String key = "833921b016964f95905442e0fab0c229";
        JSONObject ezm;
 
        while (n-- > 0) {
            String image = br.readLine();
            ezm = new JSONObject();
            ezm.put("url", image);
 
            // Try block to check for exceptions
            try {
 
                // URL for microsoft cognitive server.
                URL url = new URL(
                    "https://westus.api.cognitive.microsoft.com/emotion/v1.0/recognize");
                HttpURLConnection con
                    = (HttpURLConnection)
                          url.openConnection();
 
                // Setting the request method and
                // properties.
                con.setRequestMethod("POST");
                con.setRequestProperty(
                    "Ocp-Apim-Subscription-Key", key);
                con.setRequestProperty("Content-Type",
                                       "application/json");
                con.setRequestProperty("Accept",
                                       "application/json");
 
                // As we know the length of our content,
                // the following function sets the fixed
                // streaming mode length 83 bytes. If
                // content length not known, comment the
                // below line.
                con.setFixedLengthStreamingMode(83);
 
                // Setting the auto redirection to true
                HttpURLConnection.setFollowRedirects(true);
 
                // Overriding the default value set by
                // the static method setFollowRedirect above
                con.setInstanceFollowRedirects(false);
 
                // Setting the doOutput to true for now
                con.setDoOutput(true);
 
                OutputStream out = con.getOutputStream();
                // System.out.println(ezm.toString().getBytes().length);
 
                // Writing on the output stream
                out.write(ezm.toString().getBytes());
                InputStream ip = con.getInputStream();
 
                BufferedReader br1 = new BufferedReader(
                    new InputStreamReader(ip));
 
                // Printing the response code
                // and response message from server.
                System.out.println("Response Code:"
                                   + con.getResponseCode());
                System.out.println(
                    "Response Message:"
                    + con.getResponseMessage());
 
                // Note: Uncomment the following line to
                // print the status of FollowRedirect
                // property
                // System.out.println("FollowRedirects:"
                //           +
                //           HttpURLConnection.getFollowRedirects());
 
                // Printing the status of
                // instanceFollowRedirect property
                System.out.println(
                    "InstanceFollowRedirects:"
                    + con.getInstanceFollowRedirects());
 
                // Printing the 1st header field
                System.out.println("Header field 1:"
                                   + con.getHeaderField(1));
 
                // Printing if usingProxy flag set or not
                System.out.println("Using proxy:"
                                   + con.usingProxy());
 
                StringBuilder response
                    = new StringBuilder();
                String responseSingle = null;
 
                while ((responseSingle = br1.readLine())
                       != null) {
                    response.append(responseSingle);
                }
                String xx = response.toString();
                System.out.println(xx);
            }
 
            // Catch block to handle exceptions
            catch (Exception e) {
               
                // Display exception/s on console
                System.out.println(e.getMessage());
            }
        }
    }
}

Producción: 

Response Code:200
Response Message:OK
FollowRedirects:true
InstanceFollowRedirects:false
Header field 1:no-cache
Using proxy:false
[{"faceRectangle":{"height":134,"left":62,"top":86,"width":134},"scores":{"anger":4.105452E-
14,"contempt":1.240792E-11,"disgust":2.58925052E-11,"fear":1.82401266E-17,"happiness":1.0,
"neutral":2.487733E-10,"sadness":6.02089044E-14,"surprise":2.665974E-12}}]

Salida Explicación: Para probar este programa, se debe proporcionar la cantidad de imágenes a procesar y luego proporcionar la URL de las imágenes. Puede dejar la propiedad de longitud del contenido sin configurar, ya que el servidor la manejaría automáticamente, pero si conoce la longitud, modifíquela cada vez según corresponda. En el código fuente proporcionado, como la longitud del contenido se establece en 83 bytes, se debe usar una URL de ese tamaño. 

Sample URL: https://media.geeksforgeeks.org/wp-content/uploads/Brad_Pitt.jpg

Nota: Como es una aplicación interactiva, se recomienda ejecutarla en plataformas fuera de línea. La biblioteca JSON también debe incluirse en la ruta de compilación del proyecto para ejecutar esta aplicación.

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 *