Codifica un URL in Java

Rupam Yadav 12 ottobre 2023
  1. Codifica un URL utilizzando URLEncoder in Java
  2. Codifica un URL utilizzando URL, URI e toASCIIString() in Java
  3. Codifica un URL utilizzando URIBuilder in Java
Codifica un URL in Java

Gli URL non possono contenere caratteri non inclusi nel set di caratteri ASCII. Quando vogliamo inviare un URL su Internet, non possiamo aggiungere caratteri come spazi bianchi; questo è il motivo per cui utilizziamo la codifica per sostituire i caratteri non validi con caratteri validi come il segno più o il segno di percentuale. Nei programmi di esempio seguenti, vedremo come codificare un URL utilizzando metodi diversi.

Codifica un URL utilizzando URLEncoder in Java

La classe di utilità URLEncoder ci aiuta a codificare un determinato URL nel formato application/x-www-form-urlencoded. Di seguito, prendiamo una stringa q che contiene tre parole, separate da spazi.

Se concateniamo q alla fine di un URL, sarà un URL non valido poiché un URL valido non contiene spazi. Per risolvere questo problema, codifichiamo q utilizzando il metodo URLEncoder.encode() che accetta due argomenti: il primo è la stringa di query q, e il secondo è il charset da utilizzare.

Il metodo URLEncoder.encode() restituisce una stringa che concateniamo alla fine di un URL come query. Quando stampiamo la stringa finale encodedUrl, mostra l’intero URL valido e un segno più sostituisce gli spazi bianchi.

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

Produzione:

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

Codifica un URL utilizzando URL, URI e toASCIIString() in Java

La classe URL in Java costruisce un URL e ci fornisce diversi metodi utili per ottenere informazioni sull’URL. Creiamo l’URL che restituisce un oggetto URL. Successivamente, chiamiamo il costruttore della classe URI e passiamo le informazioni dell’URL come il protocollo (https/http) e userinfo utilizzando il metodo getUserInfo() che contiene i dettagli dell’autorizzazione.

Ora, otteniamo l’host utilizzando il metodo getHost() e lo convertiamo nella codifica compatibile ASCII (ACE) da Unicode. L’argomento successivo è la porta recuperata utilizzando il metodo getPort(), quindi otteniamo il percorso dell’URI e gli ultimi due argomenti sono la query e il riferimento.

Una volta passati tutti gli argomenti nel costruttore URI, restituisce un oggetto URI. Questo oggetto è del tipo URI che convertiamo in una stringa ASCII utilizzando il metodo 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();
    }
  }
}

Produzione:

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

Codifica un URL utilizzando URIBuilder in Java

In questo esempio, utilizziamo la libreria Apache HttpClient invece dei metodi nativi. Per includere la libreria nel nostro progetto, utilizzeremo la seguente dipendenza.

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

Usiamo la classe URIBuilder del pacchetto org.apache.http.client.utils. Creiamo un oggetto di URIBuilder e passiamo la classe urlToEncode nel suo costruttore. Successivamente, aggiungiamo la nostra query q come parametro utilizzando il metodo uriBuilder.addParameter() e passiamo il parametro query e il suo valore.

Alla fine, stampiamo UriBuilder come una stringa che mostra l’intero URL codificato.

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

Produzione:

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