web-dev-qa-db-fra.com

Comment construire une URL en Java?

Je construis une chaîne avec StringBuilder

StringBuilder builder = new StringBuilder();
builder.append("my parameters");
builder.append("other parameters");

Ensuite, je construis une URL

Url url = new Url(builder.toString());

Et puis j'essaie la connexion

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

Mais l'url ne semble pas correspondre aux résultats obtenus. C'est comme si un paramètre était faux. C'est pourquoi je pense que le problème est dans la partie de StringBuilder.

Le problème est dans un double paramètre que j'essaie de passer.

double longitude = 23.433114;
String lng = String.ValueOf(longitude);

Et puis je le mets dans l'URL. Mais si je le donne sous forme de chaîne, le résultat est correct.

String lng = "23.433114"

Est-ce que UrlEncoding est nécessaire? Je vais essayer ce qui est suggéré ci-dessous.

34
Manolis Karamanis

Essayez URIBuilder: [ Documentation ] d'Apache

import org.Apache.http.client.utils.URIBuilder;

// ...

URIBuilder b = new URIBuilder("http://example.com");
b.addParameter("t", "search");
b.addParameter("q", "apples");

Url url = b.build().toUrl();

Dépendance Maven:

<dependency>
    <groupId>org.Apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.1</version>
</dependency>
74
jhkuperus

Puisque vous voulez créer l'URL et la consommer via une requête GET, il serait préférable d'utiliser une bibliothèque qui vous aide dans ce processus. Vous pouvez utiliser HttpComponents ou une autre bibliothèque comme nirest qui est construite sur le dessus de HttpComponents, ce qui facilite tout ce travail.

Voici un exemple utilisant Unirest:

HttpResponse<String> stringResponse = Unirest.get("https://www.youtube.com/results")
    .field("search_query", "eñe")
    .asString();
System.out.println(stringResponse.getBody());

Cela va récupérer la réponse HTML correspondant à tous les résultats d'une recherche sur youtube en utilisant "eñe". Le ñ Le caractère sera encodé pour vous.

AVERTISSEMENT: Je ne suis pas attaché à Unirest en aucune façon. Je ne suis ni développeur ni sponsor de ce projet. Je ne suis qu'un utilisateur heureux de ce cadre.

4
Luiggi Mendoza