Codifique um URL em Java

Rupam Yadav 12 outubro 2023
  1. Codifique um URL usando URLEncoder em Java
  2. Codifique um URL usando URL, URI e toASCIIString() em Java
  3. Codifique um URL usando URIBuilder em Java
Codifique um URL 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 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