2012-06-26 10 views
6

Ho una serie di stringhe (URL) in forme diverse come:Qual è la differenza tra i metodi getHost e getAuthority nella classe URL in Java?

  1. http://domain name.anything/anypath
  2. https://dmain name.anything/anypath
  3. http://www.domain name.anything/anypath
  4. https://www.dmain name.anything/anypath

Queste stringhe sono salvati in file CSV. Devo analizzare tutti gli URL per ottenere solo il nome del dominio, domain name.anything. vale a dire la parte dopo il primo . e prima del primo /.

Ho separato le stringhe utilizzando il metodo split, quindi ho convertito ogni stringa in un URL, quindi ho utilizzato la funzione toAuthority per ottenere solo il nome di dominio. Il problema è che, toAuthority e toHost stanno facendo lo stesso lavoro per me, includono lo www. che non desidero. Tuttavia, nello tutorial di Oracle, sembra che toAuthority debba restituire il nome di dominio senza www..

Come posso estrarre la parte del nome dominio solo senza lo www. dell'URL ??

+0

'getHost' ottiene il nome host e' getAuthority' ottiene l'autorità –

risposta

13

Qual è la differenza tra i metodi getHost e getAuthority nella classe URL?

Per capire questo, è necessario leggere URI specification - RFC 2396.

La risposta breve è che il componente di autorità è costituito dal componente host insieme a un numero di porta opzionale, nome utente e password ... a seconda dello schema URL utilizzato.


Come posso estrarre la parte nome di dominio solo senza il "www." dell'URL ??

Si chiama getHost(), prova se inizia con la stringa "www." e se lo fa lo si rimuove.

Ma prima di iniziare a fare cose del genere, è necessario capire che rimuovere il "www." potrebbe darti un URL che non funziona o che si risolve in un documento o servizio diverso da quello a cui l'URL originale si risolve. È una cattiva idea riordinare gli URL in modo gratuito ... a meno che tu non abbia una conoscenza dettagliata di come sono organizzati i siti in questione.

La convenzione che "foo.com" e "www.foo.com" sono lo stesso posto è solo una convenzione e molti siti non la implementano. Rimozione di "www." sarebbe una cattiva idea perché è suscettibile di trasformare URL risolvibili in URL che non risolvono.

+0

Aggiunta la specifica RFC e il foo.com/" www.foo.com "il chiarimento è stato un bel tocco. –

1

Sembra che si stia cercando di estrarre il dominio di secondo livello effettivo. Questo è facile da estrarre per un piccolo numero di suffissi pubblici come .com, .net, .org ottenendo prima il nome host, come descritto da Stephen, ed estraendo la sottostringa che inizia con il secondo periodo dalla fine. Molti suffissi pubblici come co.uk interromperanno tuttavia questo semplice algoritmo.Un elenco completo di suffissi pubblici può essere trovato qui: http://publicsuffix.org/ È quindi possibile utilizzare i suffissi pubblici in una tabella di ricerca per ottenere l'effettivo dominio di secondo livello.

1

è possibile utilizzare Google guava per ottenere il nome di dominio dal nome host:

InternetDomainName.from(hostname).topPrivateDomain().toString() 
Problemi correlati