wget và URL được mã hóa


12

Tôi có một URL như thế này:

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

Tôi muốn tải xuống URL này bằng cách sử dụng wget. Nếu tôi vượt qua nó trực tiếp wget, mọi thứ đều ổn. Nhưng tôi đang ở trong một tình huống mà tôi chỉ có các phiên bản được mã hóa của các URL tải xuống. Nếu tôi chuyển phiên bản được mã hóa của URL ở trên sang wget, nó sẽ đưa ra lỗi sau:

$ 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'

Chú ý rằng wgetthay đổi vỏ của URL (ví dụ Khumbađể khumba). Tôi nên làm gì để giải quyết vấn đề này?

Câu trả lời:


19

Vì điều này rất khó chịu, nên có nhiều bộ chuyển đổi khác nhau - ví dụ trang này . Bạn có thể sử dụng những thứ này để giải mã URL - vì vậy nó sẽ chuyển đổi cái này:

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

đến:

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

Nó sẽ là niCe để có một phiên bản dòng lệnh mặc dù ...

BIÊN TẬP:

Tìm thấy một phiên bản dòng lệnh - về cơ bản:

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

Điều này có thể được thực hiện trong một tập lệnh như thế này để giải mã URL:

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

mà nếu được lưu và thực hiện được, nó hoạt động khá độc đáo.

kịch bản này cũng sẽ tải xuống UL:

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

NB Tôi nghĩ rằng trường hợp URL nằm trong không quan trọng đối với hầu hết các trang web - ví dụ:HTTP://WWW.UBUNTU.COM


4
python -c 'import urllib2; print urllib2.unquote("'${URL}'")'không giống nhau, nếu bạn đặt url của mình vào URL biến môi trường.
taneli

3
Trường hợp cho tên miền nói chung không quan trọng, nhưng trường hợp xảy ra sau đó có thể là nếu máy chủ sử dụng định tuyến phân biệt chữ hoa chữ thường hoặc không chuyển hướng URL với trường hợp khác đến trang thực tế. Trường hợp cụ thể: developer.android.com/reference/android/view/View.html so với developer.android.com/reference/android/view/view.html .
JAB

7

Bạn nên sử dụng nó như thế này

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

Chỉ cần thay thế mọi không gian với %20. Hoặc Tốt hơn là sao chép liên kết ban đầu của bạn và dán nó vào thanh địa chỉ Trình duyệt Chromium. Nó sẽ tự động định dạng nó cho bạn. Bây giờ sao chép nó từ đó đến thiết bị đầu cuối của bạn.


2
Phương pháp này có thể là một rủi ro bảo mật trong một số trường hợp. Nếu bạn đã mở Chromium, đây có thể là cách nhanh nhất để nhấn [Ctrl]+[Shift]+[J](đối với bảng điều khiển dev) và chèn decodeURIComponent("your-decoded-URI").
ComFalet

4

Wget hy vọng URL có định dạng sau:

[protocol://]host/path

Các giao thức là không bắt buộc. Khi không có giao thức , Wget giả định HTTP.

Wget chấp nhận các URL được mã hóa phần trăm chỉ tốt, nhưng các dấu phân cách giữa giao thức , máy chủđường dẫn không thể được mã hóa theo phần trăm.

Đây cũng là lý do tại sao Wget thay đổi vỏ của URL. Vì nó không tìm thấy một dấu gạch chéo chưa được mã hóa, nó giả định rằng

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

là tên máy chủ (sẽ không phân biệt chữ hoa chữ thường). Tên máy chủ thực tế là, tất nhiên , dl.minitoons.ir.

Đối với một giải pháp tự động, thay thế %3A%2F%2F%2Fsau tên máy chủ bằng :///sẽ đủ, nhưng thật dễ dàng để giải mã URL tại một. @Wilf đã đưa ra một giải pháp tốt cho việc này.

Tuy nhiên, nếu bạn định gõ lệnh Wget bằng tay, chỉ cần làm điều này:

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

1

Bạn chỉ cần đặt dấu ngoặc kép quanh url và thực hiện:

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          

Đó là cách dễ dàng hơn và bạn không phải lúng túng với công cụ.


0

Tôi đã kết thúc việc viết một kịch bản python cho nó.

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))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.