Как определить домен верхнего уровня объекта URL с помощью Java?
Учитывая это:
URL u=new URL("someURL");
Как определить домен верхнего уровня URL-адреса?
3 ответа
Guava предоставляет для этого прекрасную утилиту. Это работает следующим образом:
InternetDomainName.from("someurl.co.uk").publicSuffix()
доставит вам co.uk
InternetDomainName.from("someurl.de").publicSuffix()
доставит вам de
То есть вы хотите иметь только доменную часть верхнего уровня?
//parameter urlString: a String
//returns: a String representing the TLD of urlString, or null iff urlString is malformed
private String getTldString(String urlString) {
URL url = null;
String tldString = null;
try {
url = new URL(urlString);
String[] domainNameParts = url.getHost().split("\\.");
tldString = domainNameParts[domainNameParts.length-1];
}
catch (MalformedURLException e) {
}
return tldString;
}
Давайте проверим это!
@Test
public void identifyLocale() {
String ukString = "http://www.amazon.co.uk/Harry-Potter-Sheet-Complete-Series/dp/0739086731";
logger.debug("ukString TLD: {}", getTldString(ukString));
String deString = "http://www.amazon.de/The-Essential-George-Gershwin/dp/B00008GEOT";
logger.debug("deString TLD: {}", getTldString(deString));
String ceShiString = "http://例子.测试";
logger.debug("ceShiString TLD: {}", getTldString(ceShiString));
String dokimeString = "http://παράδειγμα.δοκιμή";
logger.debug("dokimeString TLD: {}", getTldString(dokimeString));
String nullString = null;
logger.debug("nullString TLD: {}", getTldString(nullString));
String lolString = "lol, this is a malformed URL, amirite?!";
logger.debug("lolString TLD: {}", getTldString(lolString));
}
Выход:
ukString TLD: uk
deString TLD: de
ceShiString TLD: 测试
dokimeString TLD: δοκιμή
nullString TLD: null
lolString TLD: null
Основная часть URL соответствует RFC 2732 в соответствии с документацией. Это будет означать, что просто расщепление строки, которую вы получаете от
String host = u.getHost();
не будет достаточно. Вам нужно будет убедиться, что вы соответствуете RFC 2732 при поиске на хосте ИЛИ если вы можете гарантировать, что все адреса имеют форму server.com, то вы можете искать последний. в строку и захватить.
Использование URL#getHost()
и при необходимости после этого String#split()
на "\\."
,
Обновление: если у вас действительно есть IP-адрес в качестве хоста, то вам нужно использовать InetAddress#getHostName()
независимо.