2010-07-08 5 views
12

Quelle est la bonne façon d'obtenir le domaine à partir d'une URL sans les sous-domaines?Obtenir le domaine sans sous-domaine à partir d'une URL

En Java, à partir d'une chaîne, vous pouvez créer une nouvelle URL (urlString) et appeler getHost() sur l'URL, mais vous avez des sous-domaines avec celle-ci.

Le problème est dû au fait qu'il peut y avoir des hôtes comme: subhost.example.com et subhost.example.co.uk

Il y a plusieurs autres de ces deux domaines comme partie co.uk (voir liste sur https://wiki.mozilla.org/TLD_List). Il me semble que la seule façon correcte d'obtenir seulement le domaine est d'effectuer une recherche dans la liste des TLD, de supprimer le TLD de la fin de l'hôte et de supprimer tout ce qui précède la dernière période dans l'hôte. Existe-t-il une méthode existante pour cela? Je n'en ai pas vu dans java.net.URL, et j'ai vérifié un peu les communs apache mais je n'en ai pas trouvé un là.

+0

Vous pouvez trouver des informations pertinentes dans: http://stackoverflow.com/questions/3199343/regex-to-match-domain-cctld –

Répondre

12

Je sais que cela quelques années en retard, mais si quelqu'un tombe par hasard sur cette question les opérations suivantes:

InternetDomainName.from("subhost.example.co.uk").topPrivateDomain().name 

ci-dessus retournera example.co.uk.

+3

Notez que cette classe est dans la bibliothèque Google Guava – nerdherd

+2

Merci pour la bonne info! En utilisant Selenium WebDriver qui inclut cette bibliothèque dans le pot autonome, il était capable de le référencer. Rappelez-vous, ". Nom" ne fonctionnera pas car c'est une variable privée. http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/net/InternetDomainName.html – Lukus

+0

@Lukus C'est correct. J'écrivais ça dans groovy. – Dan