Saya dapatkan url
dari pengguna dan saya harus membalas dengan HTML yang diambil.
Bagaimana cara memeriksa URL yang salah atau tidak?
Sebagai contoh :
url='google' // Malformed
url='google.com' // Malformed
url='http://google.com' // Valid
url='http://google' // Malformed
Bagaimana kita bisa mencapai hal ini ?
python
url
malformedurlexception
Yugal Jindle
sumber
sumber
url='http://google'
tidak salah format. Skema + nama host selalu valid.Jawaban:
regex validasi url django ( sumber ):
sumber
ftp
? Atau apakah saya versi django lama?http://[2001:0DB8::3]:8080/index.php?valid=true#result
Sebenarnya, menurut saya ini adalah cara terbaik.
Jika Anda menyetel
verify_exists
keTrue
, itu akan benar-benar memverifikasi bahwa URL itu ada, jika tidak maka hanya akan memeriksa apakah itu dibentuk dengan benar.edit: ah ya, pertanyaan ini adalah duplikat dari ini: Bagaimana saya dapat memeriksa apakah sebuah URL ada dengan validator Django?
sumber
verify_exists
sudah ditinggalkan. -1verify_exists
lagi. Juga sebagai penggantival
variabel Anda dapat menyebutnya sepertiURLValidator()('http://www.google.com')
Gunakan paket validator :
Instal dari PyPI dengan pip (
pip install validators
).sumber
validators.url("http://localhost:8080") ValidationFailure(func=url, args={'public': False, 'value': 'http://localhost:8080'})
Versi Benar atau Salah, berdasarkan jawaban @DMfll:
Memberikan:
sumber
True
untuk stringfake
atau bahkan untuk string kosong. Tidak akan pernah ada kesalahan karena atribut tersebut selalu ada, dan daftar akan selalu memiliki nilai boolean True karena berisi atribut tersebut. Meskipun semua atributnya adalah None, daftar tersebut tetap tidak kosong. Anda memerlukan beberapa validasi atribut karena semuanya berjalan sesuai keinginan Anda sekarang.print("I am true") if [False, None, 0, '', [], {}] else print("I am false.")
mencetak "Saya benar." ketika saya menjalankannya.[result.scheme, result.netloc, result.path]
selalu mengevaluasi keTrue
.print("I am True") if [] else print("I am False.")
mencetak "Saya salah." jadi daftar kosong adalah False. Isi dari array membutuhkan evaluasi dengan sesuatu sepertiall
fungsinya.result.path
dari tes.scheme
:if not all([result.scheme in ["file", "http", "https"], result.netloc, result.path]):
Saat ini, saya menggunakan yang berikut ini, berdasarkan jawaban Padam:
Dan seperti inilah tampilannya:
Gunakan saja
is_url("http://www.asdf.com")
.Semoga membantu!
sumber
https://https://https://www.foo.bar
.note - lepl tidak lagi didukung, maaf (Anda dipersilakan untuk menggunakannya, dan saya pikir kode di bawah ini berfungsi, tetapi tidak akan mendapatkan pembaruan).
rfc 3696 http://www.faqs.org/rfcs/rfc3696.html menjelaskan cara melakukannya (untuk http url dan email). saya mengimplementasikan rekomendasinya dalam python menggunakan lepl (pustaka parser). lihat http://acooke.org/lepl/rfc3696.html
menggunakan:
sumber
Saya membuka halaman ini mencoba mencari cara yang masuk akal untuk memvalidasi string sebagai url "valid". Saya bagikan di sini solusi saya menggunakan python3. Tidak diperlukan perpustakaan tambahan.
Lihat https://docs.python.org/2/library/urlparse.html jika Anda menggunakan python2.
Lihat https://docs.python.org/3.0/library/urllib.parse.html jika Anda menggunakan python3 seperti saya.
Berikut ini fungsi yang lebih ringkas:
sumber
EDIT
Ini sederhana dan berhasil:
Jadi
min_attr
berisi kumpulan string dasar yang perlu ada untuk menentukan validitas URL, yaituhttp://
bagian dangoogle.com
bagian.urlparse.scheme
tokohttp://
danurlparse.netloc
simpan nama domaingoogle.com
all()
mengembalikan nilai benar jika semua variabel di dalamnya mengembalikan nilai benar. Jadi jikaresult.scheme
danresult.netloc
ada yaitu memiliki beberapa nilai maka URL tersebut valid dan karenanya kembaliTrue
.sumber
https://www.google
adalah URL yang valid. Ini mungkin tidak benar-benar menyelesaikan, tetapi jika Anda peduli tentang itu, Anda perlu melakukan pemeriksaan DNS.Validasi URL dengan
urllib
dan ekspresi reguler seperti DjangoRegex validasi URL Django sebenarnya cukup bagus tetapi saya perlu mengubahnya sedikit untuk kasus penggunaan saya. Jangan ragu untuk menyesuaikannya dengan milik Anda!
Python 3.7
Penjelasan
scheme
dannetloc
bagian dari URL tertentu. (Untuk melakukan ini dengan benar, saya membagi URL denganurllib.parse.urlparse()
di dua bagian sesuai yang kemudian dicocokkan dengan istilah regex yang sesuai.)Bagian
netloc
berhenti sebelum kemunculan pertama garis miring/
, jadiport
angka masih menjadi bagian darinetloc
, misalnya:Alamat IPv4 juga divalidasi
Dukungan IPv6
Jika Anda ingin validator URL juga berfungsi dengan alamat IPv6, lakukan hal berikut:
is_valid_ipv6(ip)
dari jawaban Markus Jarderot , yang memiliki regex validator IPv6 yang sangat bagusand not is_valid_ipv6(domain)
ke yang terakhirif
Contoh
Berikut beberapa contoh regex untuk bagian
netloc
(aliasdomain
) yang sedang bekerja:sumber
Semua solusi di atas mengenali string seperti " http://www.google.com/path,www.yahoo.com/path " sebagai valid. Solusi ini selalu berfungsi sebagaimana mestinya
sumber