Quelle est la meilleure façon de vérifier si une URL est valide en Java?
Si essayé d'appeler new URL(urlString)
et d'attraper un MalformedURLException
, mais il semble être satisfait de tout ce qui commence par http://
.
Je ne suis pas préoccupé par l'établissement d'une connexion, juste la validité. Existe-t-il une méthode pour cela? Une annotation dans Hibernate Validator? Dois-je utiliser une regex?
Modifier: quelques exemples d'URL acceptées sont http://***
et http://my favorite site!
.
java
validation
url
Eric Wilson
la source
la source
URL
constructeur?http://***
" fonctionne. "http://my favorite site!
" fonctionne. Je ne peux pas faire en sorte qu'il lance une exception (quand http: // est au début.)Réponses:
Envisagez d'utiliser la classe Apache Commons UrlValidator
Il y a plusieurs propriétés que vous pouvez définir pour contrôler la façon dont cette classe se comporte, par défaut
http
,https
etftp
sont acceptés.la source
local
, etc.new URL(name).toURI()
devenir la solution.Voici comment j'ai essayé et trouvé utile,
la source
URL u = new URL(http://google).toURI();
ne lèvera pas d'exception.new URL(http://google)
c'est valide ^^ nous avons beaucoup de domaine interne dans mon entreprise comme celui-ciJ'adorerais poster ceci en commentaire de la réponse de Tendayi Mawushe , mais j'ai peur qu'il n'y ait pas assez de place;)
Voici la partie pertinente de la source Apache Commons UrlValidator :
Vous pouvez facilement créer votre propre validateur à partir de là.
la source
Le moyen le plus "infaillible" est de vérifier la disponibilité de l'URL:
la source
Mon approche préférée, sans bibliothèques externes:
la source
A en juger par le code source de
URI
, leconstructeur fait plus de validation que les autres constructeurs. Vous pourriez essayer celui-là, mais YMMV.
la source
Je n'ai aimé aucune des implémentations (car elles utilisent un Regex qui est une opération coûteuse, ou une bibliothèque qui est excessive si vous n'avez besoin que d'une seule méthode), alors j'ai fini par utiliser la classe java.net.URI avec certains vérifications supplémentaires, et en limitant les protocoles à: http, https, fichier, ftp, mailto, news, urn.
Et oui, intercepter des exceptions peut être une opération coûteuse, mais probablement pas aussi mauvaise que les expressions régulières:
la source
package de validation:
Il semble y avoir un joli paquet de Yonatan Matalon appelé UrlUtil . Citant son API:
L'approche de Sun - vérifier l'adresse réseau
Le site Java de Sun propose une tentative de connexion comme solution pour valider les URL.
Autres extraits de code regex:
Il y a des tentatives de validation regex sur le site d'Oracle et sur weberdev.com .
la source