Codificar una URL en Java

Rupam Yadav 12 octubre 2023
  1. Codificar una URL usando URLEncoder en Java
  2. Codificar una URL usando URL, URI y toASCIIString() en Java
  3. Codificar una URL usando URIBuilder en Java
Codificar una URL en Java

Las URL no pueden contener caracteres que no estén incluidos en el juego de caracteres ASCII. Cuando queremos enviar una URL a través de Internet, no podemos agregar caracteres como espacios en blanco; es por eso que usamos la codificación para reemplazar los caracteres no válidos con caracteres válidos como el signo más o el signo de porcentaje. En los programas de ejemplo a continuación, veremos cómo codificar una URL utilizando diferentes métodos.

Codificar una URL usando URLEncoder en Java

La clase de utilidad URLEncoder nos ayuda a codificar una URL determinada en el formato application/x-www-form-urlencoded. A continuación, tomamos una cadena q que contiene tres palabras, separadas por espacios en blanco.

Si concatenamos q al final de una URL, será una URL no válida ya que una URL válida no contiene espacios. Para solucionar esto, codificamos q usando el método URLEncoder.encode() que acepta dos argumentos: el primero es la cadena de consulta q, y el segundo es el charset a usar.

El método URLEncoder.encode() devuelve una cadena que concatenamos al final de una URL como una consulta. Cuando imprimimos la cadena final encodedUrl, muestra toda la URL válida y un signo más reemplaza los espacios en blanco.

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class EncodeUrl {
  public static void main(String[] args) {
    String q = "learn java language";
    String encodedUrl = "www.google.com/search?q=" + URLEncoder.encode(q, StandardCharsets.UTF_8);

    System.out.println("Encoded Url: " + encodedUrl);
  }
}

Producción :

Encoded Url: www.google.com/search?q=learn+java+language

Codificar una URL usando URL, URI y toASCIIString() en Java

La clase URL en Java construye una URL y nos proporciona varios métodos útiles para obtener información sobre la URL. Creamos la URL que devuelve un objeto URL. A continuación, llamamos al constructor de la clase URI y pasamos la información de la URL como el protocolo (https/http) y el userinfo usando el método getUserInfo() que contiene detalles de autorización.

Ahora, obtenemos el host usando el método getHost() y lo convertimos a la codificación compatible con ASCII (ACE) de Unicode. El siguiente argumento es el puerto obtenido usando el método getPort(), luego obtenemos la ruta del URI, y los dos últimos argumentos son la consulta y la referencia.

Una vez que todos los argumentos se pasan al constructor URI, devuelve un objeto URI. Este objeto es del tipo URI que convertimos en una cadena ASCII usando el método toASCIIString().

import java.net.*;

public class EncodeUrl {
  public static void main(String[] args) throws MalformedURLException {
    String q = "learn java language";
    URL urlToEncode = new URL("https://www.google.com/search?q=" + q);

    try {
      URI uri = new URI(urlToEncode.getProtocol(), urlToEncode.getUserInfo(),
          IDN.toASCII(urlToEncode.getHost()), urlToEncode.getPort(), urlToEncode.getPath(),
          urlToEncode.getQuery(), urlToEncode.getRef());

      String finalEncodedUrl = uri.toASCIIString();
      System.out.println("Encoded Url: " + finalEncodedUrl);

    } catch (URISyntaxException e) {
      e.printStackTrace();
    }
  }
}

Producción :

Encoded Url: https://www.google.com/search?q=learn%20java%20language

Codificar una URL usando URIBuilder en Java

En este ejemplo, usamos la biblioteca Apache HttpClient en lugar de métodos nativos. Para incluir la biblioteca en nuestro proyecto, usaremos la siguiente dependencia.

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>

Usamos la clase URIBuilder del paquete org.apache.http.client.utils. Creamos un objeto de URIBuilder y pasamos la clase urlToEncode en su constructor. A continuación, agregamos nuestra consulta q como parámetro utilizando el método uriBuilder.addParameter() y pasamos el parámetro de consulta y su valor.

Al final, imprimimos UriBuilder como una cadena que muestra toda la URL codificada.

import java.net.*;
import org.apache.http.client.utils.URIBuilder;

public class EncodeUrl {
  public static void main(String[] args) throws MalformedURLException {
    String q = "learn java language";
    String urlToEncode = "https://www.google.com/search";

    try {
      URIBuilder uriBuilder = new URIBuilder(urlToEncode);
      uriBuilder.addParameter("q", q);
      System.out.println("Encoded Url: " + uriBuilder.toString());

    } catch (URISyntaxException e) {
      e.printStackTrace();
    }
  }
}

Producción :

Encoded Url: https://www.google.com/search?q=learn+java+language
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn