wget und verschlüsselte URL


12

Ich habe eine URL wie diese:

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

Ich möchte diese URL mit herunterladen wget. Wenn ich es direkt weitergebe wget, geht alles gut. Aber ich bin in der Situation, dass ich nur die verschlüsselten Versionen von Download-URLs habe. Wenn ich die verschlüsselte Version der obigen URL an weitergebe wget, wird der folgende Fehler ausgegeben:

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

Beachten Sie, dass wgetdie Schreibweise der URL geändert wurde (z. B. Khumbain khumba). Was soll ich tun, um dieses Problem zu lösen?

Antworten:


19

Da dies so ärgerlich ist, gibt es verschiedene Konverter - zB diese Seite . Sie können diese verwenden, um die URL zu dekodieren - so wird dies konvertiert:

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

zu:

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

Eine Kommandozeilenversion wäre allerdings nicht zu empfehlen ...

BEARBEITEN:

Eine Kommandozeilenversion gefunden - im Grunde:

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

Dies kann in einem Skript wie diesem implementiert werden, um die URL zu dekodieren:

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

Das funktioniert ganz gut, wenn es gespeichert und ausführbar gemacht wird.

auch dieses Skript, das auch die UL herunterlädt:

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

NB Ich denke, der Fall, in dem sich die URL befindet, ist für die meisten Websites nicht wichtig - zHTTP://WWW.UBUNTU.COM


4
python -c 'import urllib2; print urllib2.unquote("'${URL}'")'funktioniert ungefähr genauso, wenn Sie Ihre URL in die URL der Umgebungsvariablen eingeben.
Taneli

3
Die Groß- und Kleinschreibung für die Domain ist im Allgemeinen nicht wichtig. Die Groß- und Kleinschreibung für das, was danach kommt, kann jedoch vorliegen, wenn der Server das Routing unter Berücksichtigung der Groß- und Kleinschreibung verwendet oder URLs mit anderer Groß- / Kleinschreibung nicht zur eigentlichen Seite umleitet. Beispiel: developer.android.com/reference/android/view/View.html versus developer.android.com/reference/android/view/view.html .
JAB

7

Sie sollten es so verwenden

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

Ersetzen Sie einfach jedes Leerzeichen durch %20. Oder kopieren Sie den ursprünglichen Link und fügen Sie ihn in die Adressleiste des Chromium-Browsers ein. Es wird automatisch für Sie formatiert. Kopieren Sie es nun von dort auf Ihr Terminal.


2
Diese Methode kann in einigen Fällen ein Sicherheitsrisiko darstellen. Wenn Sie Chromium bereits geöffnet haben, ist dies wahrscheinlich der schnellste Weg, um zu drücken [Ctrl]+[Shift]+[J](für die Entwicklerkonsole) und einzufügen decodeURIComponent("your-decoded-URI").
ComFreek

4

Wget erwartet, dass die URL das folgende Format hat:

[protocol://]host/path

Das Protokoll ist optional. In Abwesenheit eines Protokolls geht Wget von HTTP aus.

Wget akzeptiert prozentual codierte URLs, aber die Trennzeichen zwischen Protokoll , Host und Pfad können nicht prozentual codiert werden.

Aus diesem Grund hat Wget auch die Schreibweise der URL geändert. Da kein einziger nicht codierter Schrägstrich gefunden wurde, wird dies vorausgesetzt

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

ist der Hostname (ohne Berücksichtigung der Groß- und Kleinschreibung). Der tatsächliche Hostname ist natürlich dl.minitoons.ir.

Für eine automatische Lösung würde das Ersetzen von %3A%2F%2Fund %2Fnach dem Hostnamen durch ://und /ausreichen, aber es ist genauso einfach, die URL auf einmal zu dekodieren. @Wilf gab schon eine gute Lösung dafür.

Wenn Sie den Befehl Wget jedoch manuell eingeben möchten, gehen Sie wie folgt vor:

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

1

Sie müssen nur Anführungszeichen um die URL setzen und fertig:

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          

Ist auf diese Weise einfacher und Sie müssen sich nicht mit Sachen in Verlegenheit bringen.


0

Am Ende habe ich ein Python-Skript dafür geschrieben.

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))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.