108 votes

Obtenir le sous-domaine à partir d’une URL

Obtenir le sous-domaine à partir d’une URL semble facile au premier abord.

Scan pour la première période, puis revenir tout ce qui est venu après le « http:// »...

Puis vous vous souvenez

Oh. Oui, alors que vous pensez, OK, trouver la dernière période, retournez un mot et faire tout ce qui précède !

Puis vous vous souvenez

Et vous êtes à la case départ. Quelqu'un a des idées très en plus de stocker une liste de tous les TLD ?

75voto

Adam Davis Points 47683

N'importe qui ont des idées géniales d'ailleurs stocker une liste de tous les Tld?

Non, parce que chaque TLD diffère sur ce qui est considéré comme un sous-domaine, un domaine de deuxième niveau, etc.

Gardez à l'esprit qu'il existe des domaines de premier niveau, deuxième niveau, des domaines et sous-domaines. Techniquement parlant, tout, sauf le TLD est un sous-domaine.

Dans le domaine.com.exemple au royaume-uni, le domaine est un sous-domaine, com est un domaine de deuxième niveau, et le royaume-uni est le tld.

Donc, la question reste plus complexe qu'à première vue, et il dépend de la façon dont chaque TLD est géré. Vous aurez besoin d'une base de données de tous les Tld qui comprennent leur partitionnement, et ce qui est considéré comme un domaine de deuxième niveau et un sous-domaine. Il n'y a pas trop de Tld, donc la liste est raisonnablement gérable, mais la collecte de toutes ces informations n'est pas trivial. Il y a peut-être déjà une liste de ce type disponible.

Ressemble http://publicsuffix.org/ en est un exemple de liste de tous les suffixes courants (.com, de .co.royaume-uni, etc) dans une liste adapté à la recherche. Il ne veut toujours pas être facile à analyser, mais au moins vous n'avez pas à mettre à jour la liste.

Un "public suffixe" est une vertu qui Les internautes peuvent directement s'inscrire des noms. Quelques exemples de public les suffixes sont ".com", ".co.royaume-uni" et "pvt.k12.wy.de nous". Le Public Suffixe Liste est une liste de tous les publics les suffixes.

Le Public Suffixe Liste est une l'initiative de la Fondation Mozilla. Il est disponible pour une utilisation en toute logiciel, mais a été créé à l'origine pour répondre aux besoins de navigateur les fabricants. Il permet aux navigateurs de, par exemple:

  • Éviter de confidentialité dommageable "supercookies" pour de haut niveau des suffixes de nom de domaine
  • Mettez en surbrillance la partie la plus importante d'un nom de domaine de l'utilisateur interface
  • Trier les entrées de l'historique du site

À la recherche par le biais de la liste, vous pouvez le voir, c'est pas un problème trivial. Je pense que la liste est la seule façon correcte pour ce faire...

-Adam

25voto

Alnitak Points 143355

Comme dit Adam, il n'est pas facile, et il est actuellement le seul moyen pratique est d'utiliser une liste.

Même alors, il y a des exceptions: par exemple, en .uk il y a une poignée de domaines qui sont valables immédiatement à ce niveau, qui ne sont pas en .co.uk, alors que celles-ci doivent être ajoutés comme des exceptions.

C'est actuellement la façon dont les navigateurs grand public ce faire, il est nécessaire de s'assurer que example.co.uk ne peut pas définir un Cookie .co.uk ce qui pourrait ensuite être envoyé à n'importe quel autre site web, sous l' .co.uk.

La bonne nouvelle est qu'il y a déjà une liste disponible à l' http://publicsuffix.org/.

Il y a également du travail de l' IETF pour créer une sorte de standard pour permettre Tld à déclarer que leur structure de domaine ressemble. C'est un peu compliqué mais par les goûts de .uk.com, qui est exploité comme si c'était un public de suffixe, mais il n'est pas vendu par l' .com de registre.

22voto

JohnTESlade Points 1484

Publicsuffix.org semble la façon de faire. Il y a beaucoup de mises en œuvre pour analyser le contenu de la publicsuffix fichier de données fichier facilement:

9voto

Francois Bourgeois Points 1277

Comme déjà dit par Adam et John publicsuffix.org est la bonne façon de procéder. Mais, si pour une raison quelconque vous ne pouvez pas utiliser cette approche, voici une heuristique basée sur une hypothèse qui fonctionne pour 99% de tous les domaines:

Il y a une propriété qui le distingue (pas tous, mais presque tous) les "vrais" noms de domaines à partir de sous-domaines et les Tld et c'est le DNS de l'enregistrement MX. Vous pouvez créer un algorithme qui recherche ce: Supprimer les composants du nom d'hôte, un par un, et d'interroger le DNS jusqu'à ce que vous trouver un enregistrement MX. Exemple:

super.duper.domain.co.uk => no MX record, proceed
duper.domain.co.uk       => no MX record, proceed
domain.co.uk             => MX record found! assume that's the domain

Voici un exemple en php:

function getDomainWithMX($url) {
    //parse hostname from URL 
    //http://www.example.co.uk/index.php => www.example.co.uk
    $urlParts = parse_url($url);
    if ($urlParts === false || empty($urlParts["host"])) 
        throw new InvalidArgumentException("Malformed URL");

    //find first partial name with MX record
    $hostnameParts = explode(".", $urlParts["host"]);
    do {
        $hostname = implode(".", $hostnameParts);
        if (checkdnsrr($hostname, "MX")) return $hostname;
    } while (array_shift($hostnameParts) !== null);

    throw new DomainException("No MX record found");
}

1voto

Isak Points 330

Viens d’écrire un programme pour cela en clojure basé sur les infos de publicsuffix.org :

https://github.com/isaksky/url_dom

Par exemple :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X