Maison >Java >javaDidacticiel >Comment extraire de manière fiable les noms de domaine des URL en Java ?

Comment extraire de manière fiable les noms de domaine des URL en Java ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-03 04:21:31816parcourir

How to Reliably Extract Domain Names from URLs in Java?

Extraire des noms de domaine à partir d'URL

Extraire des noms de domaine à partir d'URL est une tâche courante dans le développement et la programmation Web. Il existe plusieurs approches pour cette tâche, mais la méthode la plus simple et la plus robuste consiste à utiliser la classe java.net.URI.

Code Java original

Le code Java fourni le code utilise la classe java.net.URL pour extraire le nom de domaine. Bien que cette approche puisse fonctionner dans la plupart des cas, elle présente des limites et des inconvénients potentiels.

Limitations du code d'origine :

  • Il suppose que l'URL commence par "http" ou "https", ce qui n'est pas toujours le cas (par exemple, les URL relatives).
  • Il effectue une recherche DNS lors de la comparaison des URL à l'aide de la méthode égale, ce qui le rend vulnérable au déni de service. attaques.

Approche alternative utilisant l'URI

L'approche préférée consiste à utiliser la classe java.net.URI, qui fournit un moyen standardisé et fiable d'analyser et manipuler les URL. L'extrait de code suivant illustre cette approche :

<code class="java">public static String getDomainName(String url) throws URISyntaxException {
    URI uri = new URI(url);
    String domain = uri.getHost();
    return domain.startsWith("www.") ? domain.substring(4) : domain;
}</code>

Ce code analyse d'abord l'URL en un objet URI à l'aide du nouveau constructeur URI(url). Ensuite, il récupère le nom de domaine à l'aide de la méthode getHost(), qui renvoie le composant hôte de l'URI. Si le composant hôte commence par "www.", le préfixe ".www" est supprimé à l'aide de la méthode de sous-chaîne.

Cas extrêmes à prendre en compte

Même avec la version améliorée Approche basée sur l'URI, certains cas extrêmes peuvent toujours causer des problèmes :

  • URL avec des chemins relatifs (par exemple, "httpfoo/bar")
  • Protocoles insensibles à la casse (par exemple, "HTTP ://example.com/")
  • URL relatives au protocole (par exemple, "//example.com/")
  • URL relatives avec des composants de chemin commençant par "www" (par exemple, "www/foo")

Pour gérer ces cas extrêmes, un mécanisme d'analyse plus complet, tel que l'expression régulière fournie dans l'annexe B de la RFC 3986, peut être nécessaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn