Codificar una URL en Java
-
Codificar una URL usando
URLEncoder
en Java -
Codificar una URL usando
URL
,URI
ytoASCIIString()
en Java -
Codificar una URL usando
URIBuilder
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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn