In meiner Django-App muss ich den Hostnamen vom Referrer request.META.get('HTTP_REFERER')
zusammen mit seinem Protokoll abrufen, damit URLs wie:
- https://docs.google.com/spreadsheet/ccc?key=blah-blah-blah-blah#gid=1
- /programming/1234567/blah-blah-blah-blah
- http://www.example.com
- https://www.other-domain.com/whatever/blah/blah/?v1=0&v2=blah+blah ...
Ich sollte bekommen:
- https://docs.google.com/
- https://stackoverflow.com/
- http://www.example.com
- https://www.other-domain.com/
Ich habe mir andere verwandte Fragen angesehen und etwas über urlparse herausgefunden, aber das hat seitdem nicht mehr funktioniert
>>> urlparse(request.META.get('HTTP_REFERER')).hostname
'docs.google.com'
/
das dritte Beispielhttp://www.domain.com
, aber ich denke , das ist ein Manko der Frage sein könnte, nicht der Antwort.urlparse.urlparse()
gibt ein benanntes Tupel-ähnliches Ergebnis zurück; Sie könnten{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri)
für die Lesbarkeit verwenden.netloc
es sich nicht um eine Domain handelt: Versuchen Sieurlparse.urlparse('http://user:[email protected]:8080')
herauszufinden, dass Teile wie'user:pass@'
and':8080'
from urllib.parse import urlparse
https://github.com/john-kurkowski/tldextract
Dies ist eine ausführlichere Version von urlparse. Es erkennt Domains und Subdomains für Sie.
Aus ihrer Dokumentation:
ExtractResult
ist ein benanntes Tupel, daher ist es einfach, auf die gewünschten Teile zuzugreifen.quelle
Python3 mit urlsplit :
quelle
Reine String-Operationen :):
Das war's Leute.
quelle
url.split("//")[-1].split("/")[0].split('?')[0]
:-))quelle
from urllib.parse import urlparse
.Wenn Sie glauben, dass Ihre URL gültig ist, funktioniert dies die ganze Zeit
quelle
split
ist falsch, es sind keine Schrägstriche mehr zu teilen.Stimmt etwas mit reinen String-Operationen nicht:
Wenn Sie es vorziehen, einen abschließenden Schrägstrich anhängen zu lassen, erweitern Sie dieses Skript folgendermaßen:
Das kann wohl ein bisschen optimiert werden ...
quelle
Hier ist eine leicht verbesserte Version:
Ausgabe
Geige: https://pyfiddle.io/fiddle/23e4976e-88d2-4757-993e-532aa41b7bf0/?i=true
quelle
Dies ist etwas stumpf, wird aber
urlparse
in beide Richtungen verwendet:("",) * 4
Dieses ungerade Bit ist, weil urlparse eine Folge von genaulen(urlparse.ParseResult._fields)
= 6 erwartetquelle
Ich weiß, dass es eine alte Frage ist, aber auch ich bin heute darauf gestoßen. Dies wurde mit einem Einzeiler gelöst:
quelle
Die Standardbibliotheksfunktion urllib.parse.urlsplit () ist alles, was Sie brauchen. Hier ist ein Beispiel für Python3:
quelle
Es könnte durch re.search () gelöst werden
quelle
um Domain / Hostname und Origin zu erhalten *
*
Origin
wird inXMLHttpRequest
Headern verwendetquelle
Sie können einfach urljoin mit der relativen Wurzel '/' als zweites Argument verwenden:
quelle
Wenn es weniger als 3 Schrägstriche enthält, haben Sie es und wenn nicht, können wir das Vorkommen dazwischen finden:
quelle