Il y a un générateur d'URL valide pour Java?
J'ai besoin de générer des URL valides.
Exemple: Je passe l'URL: google.com . Le générateur renvoie http://google.com / .
Certains navigateurs le font. J'ai essayé de faire mon propre algorithme, mais a échoue.
Un autre exemple: www.yadayadayada.com/../test renvoie http://www.yadayadayada.com/test/
public String generateValidURL(String url) {
int pos = 0;
try {
url = url.trim();
url = url.replaceAll(" ", "%20");
if (url.startsWith("http") && (!url.substring(4).startsWith("://"))) {
for (int i = 4; i < 7; i++) {
if ((url.charAt(i) == '/') || (url.charAt(i) == ':')) {
pos = i;
}
}
url = url.substring(pos + 1);
}
if(url.startsWith("https")){
url = url.replace("https", "http");
}
if (!url.startsWith("http")) {
url = "http://" + url;
}
if (!url.substring(7).contains("/")) {
url += "/";
}
url = url.replace(",", ".");
url = url.replace("../", "/");
url = url.substring(0, 7) + url.substring(7).replace("//", "/");
return url;
} catch (Exception e) {
System.out.println("Error generating valid URL : " + e);
return null;
}
}
2 answers
Mise à jour: maintenant, c'est plus clair ce que vous voulez réaliser - je ne pense pas qu'il y ait un utilitaire pour cela. Votre méthode devrait le faire, il suffit de la déboguer.
Réponse originale:
URL url = new URL("http", domain, "/");
String output = url.toExternalForm();
En fait, vous pouvez utiliser le URI
classe à la place:
URI uri = new URI("http", "google.com", "/test", null);
, Vous pouvez utiliser uri.resolve("../relativePath")
et elle sera résolu. Mais gardez à l'esprit que votre exemple avec /../test
== /test
n'est pas approprié (vous devrez gérer ce cas manuellement)
MockNeat a une méthode qui fait exactement cela - il génère des URL valides basées sur un ensemble de contraintes prédéfinies.
Par exemple:
MockNeat m = MockNeat.threadLocal();
m.urls()
.scheme(HTTP) // all the URLS have a HTTP scheme
//.auth() -- can include auth information in the URL
.domain(POPULAR) // only popular domain names can be used
.host(ADVERB_VERB)
.ports(80, 8080, 8090) // only the following ports can be used
.list(10)
.consume(System.out::println);
Va générer une liste de 10 URL qui ressemblent à ceci:
[http://www.tenthlyassays.net:8090, http://www.aflamecurr.io:8080, http://www.thirdlygirth.org:8080, http://www.foreprobates.net:8090, http://www.pokilyrile.org:80, http://www.cheerfullyapprizings.net:8090, http://www.whistlinglyunsettles.info:80, http://www.gratistrichinized.io:8080, http://www.sternwardssnuffle.gov:8090, http://www.yesterdaynix.edu:8090]
Vous pouvez trouver la documentation dans le wiki du projet.
Avertissement: je suis l'un des développeurs de cette bibliothèque.