Get-Protokoll + host-name aus der URL
In meinem Django-app, die ich brauche, um den host-Namen aus den referrer in request.META.get('HTTP_REFERER')
zusammen mit dem Protokoll, so dass von URLs wie:
- https://docs.google.com/spreadsheet/ccc?key=blah-blah-blah-blah#gid=1
- https://stackoverflow.com/questions/1234567/blah-blah-blah-blah
- http://www.example.com
- https://www.other-domain.com/whatever/blah/blah/?v1=0&v2=blah+blah ...
Sollte ich bekommen:
- https://docs.google.com/
- https://stackoverflow.com/
- http://www.example.com
- https://www.other-domain.com/
Ich schaute über andere Verwandte Fragen und fand über urlparse, aber das hat nicht den trick tun, da
>>> urlparse(request.META.get('HTTP_REFERER')).hostname
'docs.google.com'
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie in der Lage sein, es zu tun mit
urlparse
(docs: python2, Python ist3):/
dem Dritten Beispielhttp://www.domain.com
, aber ich denke, das könnte ein Manko der Frage, nicht die Antwort.urlparse.urlparse()
gibt eine namedtuple-wie Folge, könnten Sie{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri)
für die Lesbarkeit.netloc
ist nicht mit der Domäne: versuchenurlparse.urlparse('http://user:[email protected]:8080')
und finde, es gibt Teile wie'user:pass@'
und':8080'
from urllib.parse import urlparse
https://github.com/john-kurkowski/tldextract
Dies ist eine ausführlichere version von urlparse. Es erkennt domains und sub-domains für Sie.
Aus Ihrer Dokumentation:
ExtractResult
ist ein namedtuple, so ist es einfachen Zugriff auf die Teile, die Sie wollen.Python ist3 mit urlsplit:
Reine string-Operationen :):
Das ist alles, Leute.
url.split("//")[-1].split("/")[0].split('?')[0]
:-))from urllib.parse import urlparse
.wenn Sie denken, dass Ihre url gültig ist, dann funktioniert die ganze Zeit
split
ist falsch, es sind nicht mehr durch Schrägstriche zu trennen.Hier ist eine etwas verbesserte version:
Ausgabe
Fiddle: https://pyfiddle.io/fiddle/23e4976e-88d2-4757-993e-532aa41b7bf0/?i=true
Gibt es etwas falsch mit der reinen string-Operationen:
Wenn Sie lieber mit einem nachgestellten Schrägstrich angehängt, erweitern dieses Skript ein bisschen wie so:
Kann wahrscheinlich optimiert ein bisschen ...
Dies ist ein bisschen stumpf, aber verwendet
urlparse
in beide Richtungen:dass ungerade
("",) * 4
bit ist da urlparse erwartet eine Sequenz von genaulen(urlparse.ParseResult._fields)
= 6Ich weiß, es ist eine alte Frage, aber auch ich traf Sie heute.
Gelöst wird dies mit einem Einzeiler:
erhalten Domäne/hostname und Herkunft*
*
Origin
verwendet wird, inXMLHttpRequest
HeaderWenn es enthält weniger als 3 Schrägstriche so haben Sie es haben, und wenn nicht, dann finden wir das auftreten zwischen: