Codifique um URL em Java
-
Codifique um URL usando
URLEncoder
em Java -
Codifique um URL usando
URL
,URI
etoASCIIString()
em Java -
Codifique um URL usando
URIBuilder
em Java

Os URLs não podem conter caracteres que não estejam incluídos no conjunto de caracteres ASCII. Quando queremos enviar um URL pela Internet, não podemos acrescentar caracteres como espaços em branco; é por isso que usamos a codificação para substituir os caracteres inválidos por caracteres válidos, como o sinal de mais ou o sinal de porcentagem. Nos programas de exemplo abaixo, veremos como codificar uma URL usando métodos diferentes.
Codifique um URL usando URLEncoder
em Java
A classe de utilitário URLEncoder
nos ajuda a codificar um determinado URL no formato application/x-www-form-urlencoded
. Abaixo, pegamos uma string q
que contém três palavras, separadas por espaços em branco.
Se concatenarmos q
no final de um URL, será um URL inválido, pois um URL válido não contém espaços. Para corrigir isso, codificamos q
usando o método URLEncoder.encode()
que aceita dois argumentos: o primeiro é a string de consulta q
e o segundo é o charset
a ser usado.
O método URLEncoder.encode()
retorna uma string que concatenamos no final de uma URL como uma consulta. Quando imprimimos a string final encodedUrl
, ela mostra todo o URL válido e um sinal de mais substitui os espaços em branco.
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);
}
}
Resultado:
Encoded Url: www.google.com/search?q=learn+java+language
Codifique um URL usando URL
, URI
e toASCIIString()
em Java
A classe URL
em Java constrói uma URL e nos fornece vários métodos úteis para obter informações sobre a URL. Criamos a URL que retorna um objeto URL
. Em seguida, chamamos o construtor da classe URI
e passamos as informações do URL como o protocolo (https/http)
e o userinfo
usando o método getUserInfo()
que contém detalhes de autorização.
Agora, obtemos o host usando o método getHost()
e o convertemos na codificação compatível com ASCII (ACE) do Unicode. O próximo argumento é a porta obtida usando o método getPort()
, então obtemos o caminho do URI e os dois últimos argumentos são a consulta e a referência.
Depois que todos os argumentos são passados para o construtor URI
, ele retorna um objeto URI
. Este objeto é do tipo URI
que convertemos em uma string ASCII usando o 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();
}
}
}
Resultado:
Encoded Url: https://www.google.com/search?q=learn%20java%20language
Codifique um URL usando URIBuilder
em Java
Neste exemplo, usamos a biblioteca Apache HttpClient
em vez de métodos nativos. Para incluir a biblioteca em nosso projeto, usaremos a seguinte dependência.
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
Usamos a classe URIBuilder
do pacote org.apache.http.client.utils
. Criamos um objeto de URIBuilder
e passamos a classe urlToEncode
em seu construtor. A seguir, adicionamos nossa consulta q
como um parâmetro usando o método uriBuilder.addParameter()
e passamos o parâmetro de consulta e seu valor.
No final, imprimimos UriBuilder
como uma string que exibe todo o URL codificado.
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();
}
}
}
Resultado:
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