210 votes

Obtenir le protocole + le nom d'hôte à partir de l'URL

Dans mon application Django, j'ai besoin de récupérer le nom de l'hôte à partir du référent dans le champ request.META.get('HTTP_REFERER') ainsi que son protocole, de sorte que des URL comme :

Je devrais avoir :

J'ai regardé d'autres questions connexes et j'ai trouvé urlparse, mais cela n'a pas fait l'affaire car

>>> urlparse(request.META.get('HTTP_REFERER')).hostname
'docs.google.com'

3voto

kiwi Points 11

Il pourrait être résolu par re.search()

import re
url = 'https://docs.google.com/spreadsheet/ccc?key=blah-blah-blah-blah#gid=1'
result = re.search(r'^http[s]*:\/\/[\w\.]*', url).group()
print(result)

#result
'https://docs.google.com'

2voto

IfLoop Points 59461

C'est un peu obtus, mais utilise urlparse dans les deux sens :

import urlparse
def uri2schemehostname(uri):
    urlparse.urlunparse(urlparse.urlparse(uri)[:2] + ("",) * 4)

que bizarre ("",) * 4 est parce que urlparse s'attend à une séquence de exactement len(urlparse.ParseResult._fields) = 6

2voto

Mirko Points 180

Vous pouvez simplement utiliser urljoin avec la racine relative '/' comme deuxième argument :

import urllib.parse

url = 'https://stackoverflow.com/questions/9626535/get-protocol-host-name-from-url'
root_url = urllib.parse.urljoin(url, '/')
print(root_url)

2voto

Praveen Kumar Points 51

C'est le moyen le plus simple d'obtenir l'URL racine de n'importe quel domaine.

from urllib.parse import urlparse

url = urlparse('https://stackoverflow.com/questions/9626535/')
root_url = url.scheme + '://' + url.hostname
print(root_url) # https://stackoverflow.com

0voto

cieunteung Points 826

Pour obtenir le domaine/le nom d'hôte et l'origine*

url = 'https://stackoverflow.com/questions/9626535/get-protocol-host-name-from-url'
hostname = url.split('/')[2] # stackoverflow.com
origin = '/'.join(url.split('/')[:3]) # https://stackoverflow.com

* Origin est utilisé dans XMLHttpRequest en-têtes

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