La méthode equals()
de la classe URL dans la bibliothèque de classes Java effectue une requête DNS pour obtenir l'adresse IP du nom d'hôte, pour vérifier l'égalité des deux adresses IP. Cela arrive même pour les URL créées à partir du même String
. Existe-t-il un moyen d'éviter cet accès à Internet?Comment éviter que URL.equals ait besoin d'accéder à internet en Java?
Répondre
Utiliser java.net.URI au lieu d'URL.
N'utilisez pas URL.equals. Comme le dit la documentation,
Remarque: Le comportement défini pour
equals
est connu pour être incompatible avec l'hébergement virtuel dans HTTP.
Comment devrais-je tester l'égalité? – Mnementh
Vous pouvez utiliser toString() ou toExternalForm() pour obtenir le formulaire externe et les comparer. Les tests préliminaires montrent ici qu'il n'accède pas au DNS. –
Je viens de mettre à jour la réponse de Bill. Appelez simplement àURI() sur vos objets URL. –
Si vous voulez juste pour comparer les chaînes d'URL, essayez
url1.toString().equals(url2.toString())
Les deux chaînes peuvent être très différentes mais pointer vers la même ressource. –
Si vous souhaitez vérifier la ressource référencée par une URL, vous avez évidemment besoin d'un accès Internet. Par conséquent, j'ai fait l'hypothèse qu'il voulait comparer les URL eux-mêmes. D'où ma qualification de "si vous voulez juste comparer les cordes d'URL". – Rick
Et bien sûr cela a aussi un sens sémantique, parce que vous voulez comparer les identifiants plutôt que les emplacements – Gareth