Encoder une URL en Java

Rupam Yadav 12 octobre 2023
  1. Encoder une URL en utilisant URLEncoder en Java
  2. Encoder une URL en utilisant URL, URI et toASCIIString() en Java
  3. Encoder une URL en utilisant URIBuilder en Java
Encoder une URL en Java

Les URL ne peuvent pas contenir de caractères qui ne sont pas inclus dans le jeu de caractères ASCII. Lorsque nous voulons envoyer une URL sur Internet, nous ne pouvons pas ajouter de caractères comme des espaces ; c’est pourquoi nous utilisons l’encodage pour remplacer les caractères invalides par des caractères valides comme le signe plus ou le signe pourcentage. Dans les exemples de programmes ci-dessous, nous verrons comment encoder une URL en utilisant différentes méthodes.

Encoder une URL en utilisant URLEncoder en Java

La classe utilitaire URLEncoder nous aide à encoder une URL donnée au format application/x-www-form-urlencoded. Ci-dessous, nous prenons une chaîne q qui contient trois mots, séparés par des espaces.

Si nous concaténons q à la fin d’une URL, ce sera une URL invalide car une URL valide ne contient pas d’espaces. Pour résoudre ce problème, nous encodons q à l’aide de la méthode URLEncoder.encode() qui accepte deux arguments : le premier est la chaîne de requête q et le second est le charset à utiliser.

La méthode URLEncoder.encode() renvoie une chaîne que nous concaténons à la fin d’une URL sous forme de requête. Lorsque nous imprimons la chaîne finale encodedUrl, elle affiche l’intégralité de l’URL valide et un signe plus remplace les espaces.

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);
  }
}

Production:

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

Encoder une URL en utilisant URL, URI et toASCIIString() en Java

La classe URL en Java construit une URL et nous fournit plusieurs méthodes utiles pour obtenir des informations sur l’URL. Nous créons l’URL qui renvoie un objet URL. Ensuite, nous appelons le constructeur de la classe URI et passons les informations de l’URL comme le protocole (https/http) et le userinfo en utilisant la méthode getUserInfo() qui contient les détails de l’autorisation.

Maintenant, nous obtenons l’hôte à l’aide de la méthode getHost() et le convertissons en codage compatible ASCII (ACE) à partir d’Unicode. L’argument suivant est le port récupéré à l’aide de la méthode getPort(), puis nous obtenons le chemin de l’URI, et les deux derniers arguments sont la requête et la référence.

Une fois tous les arguments passés dans le constructeur URI, il renvoie un objet URI. Cet objet est de type URI que l’on convertit en chaîne ASCII à l’aide de la méthode 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();
    }
  }
}

Production:

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

Encoder une URL en utilisant URIBuilder en Java

Dans cet exemple, nous utilisons la bibliothèque Apache HttpClient à la place des méthodes natives. Pour inclure la bibliothèque dans notre projet, nous utiliserons la dépendance suivante.

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

Nous utilisons la classe URIBuilder du package org.apache.http.client.utils. On crée un objet de URIBuilder et on passe la classe urlToEncode dans son constructeur. Ensuite, nous ajoutons notre requête q en tant que paramètre à l’aide de la méthode uriBuilder.addParameter() et passons le paramètre de la requête et sa valeur.

À la fin, nous imprimons UriBuilder sous forme de chaîne qui affiche l’intégralité de l’URL encodée.

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();
    }
  }
}

Production:

Encoded Url: https://www.google.com/search?q=learn+java+language
Auteur: Rupam Yadav
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