Dalam aplikasi Django saya, saya perlu mendapatkan nama host dari pengarah request.META.get('HTTP_REFERER')
bersama dengan protokolnya sehingga dari URL seperti:
- 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/wh whatever/blah/blah/?v1=0 & v2=blah+blah ...
Saya harus mendapatkan:
- https://docs.google.com/
- https://stackoverflow.com/
- http://www.example.com
- https://www.other-domain.com/
Saya mencari pertanyaan terkait lainnya dan menemukan tentang urlparse, tetapi sejak itu tidak berhasil
>>> urlparse(request.META.get('HTTP_REFERER')).hostname
'docs.google.com'
/
untuk contoh ketigahttp://www.domain.com
, tapi saya pikir ini mungkin kelemahan dari pertanyaan, bukan dari jawabannya.urlparse.urlparse()
mengembalikan hasil seperti-nama; Anda bisa menggunakan{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri)
untuk keterbacaan.netloc
bukan domain: mencobaurlparse.urlparse('http://user:[email protected]:8080')
dan menemukan memberikan bagian seperti'user:pass@'
dan':8080'
from urllib.parse import urlparse
https://github.com/john-kurkowski/tldextract
Ini adalah versi urlparse yang lebih verbose. Ini mendeteksi domain dan subdomain untuk Anda.
Dari dokumentasi mereka:
ExtractResult
adalah namesupuple, jadi mudah untuk mengakses bagian yang Anda inginkan.sumber
Python3 menggunakan urlsplit :
sumber
Operasi string murni :):
Itu saja, semuanya.
sumber
url.split("//")[-1].split("/")[0].split('?')[0]
:-))sumber
from urllib.parse import urlparse
.jika menurut Anda url Anda valid maka ini akan berfungsi sepanjang waktu
sumber
split
salah, tidak ada lagi garis miring ke depan untuk dibagi.Apakah ada yang salah dengan operasi string murni:
Jika Anda lebih suka menambahkan garis miring ditambahkan, rentangkan skrip ini sedikit seperti ini:
Itu mungkin bisa sedikit dioptimalkan ...
sumber
Ini versi yang sedikit ditingkatkan:
Keluaran
Fiddle: https://pyfiddle.io/fiddle/23e4976e-88d2-4757-993e-532aa41b7bf0/?i=true
sumber
Ini agak tumpul, tetapi digunakan
urlparse
di kedua arah:("",) * 4
bit aneh itu karena urlparse mengharapkan urutan tepatlen(urlparse.ParseResult._fields)
= 6sumber
Saya tahu ini pertanyaan lama, tetapi saya juga menjumpainya hari ini. Selesaikan ini dengan satu kalimat:
sumber
Fungsi perpustakaan standar urllib.parse.urlsplit () adalah semua yang Anda butuhkan. Berikut adalah contoh untuk Python3:
sumber
Itu bisa diselesaikan dengan re.search ()
sumber
untuk mendapatkan domain / nama host dan Asal *
*
Origin
digunakan dalamXMLHttpRequest
headersumber
Anda cukup menggunakan urljoin dengan root relatif '/' sebagai argumen kedua:
sumber
Jika mengandung kurang dari 3 garis miring maka Anda telah mendapatkannya dan jika tidak maka kita dapat menemukan kejadian di antaranya:
sumber