wget dan URL yang disandikan

12

Saya punya URL seperti ini:

http://dl.minitoons.ir/longs/Khumba (2013) [EN] [BR-Rip 720p] - [www.minitoons.ir].rar

Saya ingin mengunduh URL ini menggunakan wget. Jika saya meneruskannya langsung wget, semuanya berjalan dengan baik. Tetapi saya berada dalam situasi bahwa saya hanya memiliki versi unduh URL unduhan. Jika saya meneruskan versi URL yang disandikan ke atas wget, itu melontarkan kesalahan berikut:

$ wget "http%3A%2F%2Fdl.minitoons.ir%2Flongs%2FKhumba%20(2013)%20%5BEN%5D%20%5BBR-Rip%20720p%5D%20-%20%5Bwww.minitoons.ir%5D.rar"
wget: unable to resolve host address `http://dl.minitoons.ir/longs/khumba (2013) [en] [br-rip 720p] - [www.minitoons.ir].rar'

Perhatikan bahwa wgetmengubah casing URL (misalnya Khumbake khumba). Apa yang harus saya lakukan untuk menyelesaikan masalah ini?

melmi
sumber

Jawaban:

19

Karena ini sangat umum, ada berbagai konverter yang tersedia - misalnya situs ini . Anda dapat menggunakan ini untuk mendekode URL - sehingga ini akan mengonversi ini:

http%3A%2F%2Fdl.minitoons.ir%2Flongs%2FKhumba%20(2013)%20%5BEN%5D%20%5BBR-Rip%20720p%5D%20-%20%5Bwww.minitoons.ir%5D.rar

untuk:

http://dl.minitoons.ir/longs/Khumba (2013) [EN] [BR-Rip 720p] - [www.minitoons.ir].rar

Akan menjadi niCe untuk memiliki versi baris perintah ...

EDIT:

Menemukan versi baris perintah - pada dasarnya:

echo "http%3A%2F%2F-REST-OF-URL" | sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' | xargs echo -e

Ini dapat diimplementasikan dalam skrip seperti ini untuk memecahkan kode URL:

#!/bin/bash
echo "$@" | sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' | xargs echo -e
exit

yang jika disimpan dan dibuat dapat dieksekusi, bekerja dengan sangat baik.

juga skrip ini, yang akan mengunduh UL juga:

#!/bin/bash
echo "$@" | sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' | xargs echo -e | wget -c -i -
exit

NB Saya pikir kasus URL tidak penting bagi sebagian besar situs - misalnyaHTTP://WWW.UBUNTU.COM

Wilf
sumber
4
python -c 'import urllib2; print urllib2.unquote("'${URL}'")'kira-kira sama, jika Anda meletakkan URL Anda di URL variabel lingkungan.
taneli
3
Kasus untuk domain pada umumnya tidak penting, tetapi kasus untuk apa yang terjadi setelahnya bisa jika server menggunakan perutean case-sensitive atau tidak mengarahkan ulang URL dengan case berbeda ke halaman yang sebenarnya. Contoh kasus: developer.android.com/reference/android/view/View.html versus developer.android.com/reference/android/view/view.html .
JAB
7

Anda harus menggunakannya seperti ini

wget "http://dl.minitoons.ir/longs/Khumba%20(2013)%20[EN]%20[BR-Rip%20720p]%20-%20[www.minitoons.ir].rar"`

Ganti setiap ruang dengan %20. Atau Lebih Baik salin tautan asli Anda dan tempel di bilah alamat Browser Chromium. Ini akan secara otomatis memformatnya untuk Anda. Sekarang salin dari sana ke terminal Anda.

g_p
sumber
2
Metode ini dapat menjadi risiko keamanan dalam beberapa kasus. Jika Anda sudah memiliki Chromium terbuka, itu mungkin cara tercepat untuk menekan [Ctrl]+[Shift]+[J](untuk konsol dev) dan menyisipkan decodeURIComponent("your-decoded-URI").
ComFreek
4

Wget mengharapkan URL memiliki format berikut:

[protocol://]host/path

The protokol opsional. Dengan tidak adanya protokol , Wget mengasumsikan HTTP.

Wget menerima URL yang dikodekan persen dengan baik, tetapi pembatas antara protokol , host , dan path tidak dapat dikodekan persen.

Ini juga mengapa Wget mengubah casing URL. Karena tidak menemukan satu tebasan tanpa kode, ia mengasumsikan itu

http://dl.minitoons.ir/longs/khumba (2013) [en] [br-rip 720p] - [www.minitoons.ir].rar

adalah nama host (yang peka terhadap huruf besar-kecil). Nama host sebenarnya, tentu saja dl.minitoons.ir,.

Untuk solusi otomatis, mengganti %3A%2F%2Fdan %2Fsetelah nama host dengan ://dan /akan cukup, tetapi semudah memecahkan kode URL pada satu. @ Willf sudah memberikan solusi yang bagus untuk ini.

Namun, jika Anda akan mengetik perintah Wget secara manual, lakukan saja ini:

wget "dl.minitoons.ir/longs%2FKhumba%20(2013)%20%5BEN%5D%20%5BBR-Rip%20720p%5D%20-%20%5Bwww.minitoons.ir%5D.rar"
Dennis
sumber
1

Anda hanya perlu memberi tanda kutip di sekitar url dan selesai:

wget "http://dl.minitoons.ir/longs/Khumba (2013) [EN] [BR-Rip 720p] - [www.minitoons.ir].rar"
Warning: wildcards not supported in HTTP.
--2014-03-02 20:40:20--  http://dl.minitoons.ir/longs/Khumba%20(2013)%20[EN]%20[BR-Rip%20720p]%20-%20[www.minitoons.ir].rar
Resolving dl.minitoons.ir (dl.minitoons.ir)... 79.127.127.41
Connecting to dl.minitoons.ir (dl.minitoons.ir)|79.127.127.41|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 594062365 (567M) [application/x-rar-compressed]
Saving to: ‘Khumba (2013) [EN] [BR-Rip 720p] - [www.minitoons.ir].rar’

 0% [                                       ] 73,288      44.9KB/s          

Lebih mudah seperti itu dan Anda tidak perlu mempermalukan diri sendiri dengan barang-barang.

Braiam
sumber
0

Saya akhirnya menulis skrip python untuk itu.

from os import listdir, rename
from urllib.parse import unquote  # py2: from urllib import unquote

os.chdir('/mydir/')
for filename in listdir('.'):
    rename(filename, unquote(filename))
sialan
sumber