wget 및 인코딩 된 URL


12

다음과 같은 URL이 있습니다.

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

을 사용하여이 URL을 다운로드하고 싶습니다 wget. 에 직접 전달하면 wget모든 것이 잘됩니다. 그러나 인코딩 된 버전의 다운로드 URL 만있는 상황에 처해 있습니다. 위의 URL 인코딩 된 버전을에 전달 wget하면 다음 오류가 발생합니다.

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

wgetURL의 대소 문자 를 변경했습니다 (예 : Khumbakhumba). 이 문제를 해결하려면 어떻게해야합니까?

답변:


19

이 작업은 매우 귀찮으므로이 사이트와 같은 다양한 변환기를 사용할 수 있습니다 . 이것들을 사용하여 URL을 디코딩 할 수 있으므로 이것을 변환합니다 :

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

에:

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

그래도 커맨드 라인 버전을 사용하는 것이 좋을 것입니다 ...

편집하다:

기본적으로 명령 행 버전을 찾았습니다.

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

URL을 디코딩하기 위해 다음과 같은 스크립트로 구현할 수 있습니다.

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

저장하고 실행 가능하게 만들면 꽤 잘 작동합니다.

또한이 스크립트는 UL도 다운로드합니다.

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

NB URL이있는 경우는 대부분의 사이트에서 중요하지 않다고 생각합니다. 예 :HTTP://WWW.UBUNTU.COM


4
python -c 'import urllib2; print urllib2.unquote("'${URL}'")'환경 변수 URL에 URL을 넣으면 거의 동일합니다.
taneli

3
도메인의 경우는 일반적으로 중요하지 않지만 서버가 대소 문자를 구분하는 라우팅을 사용하거나 대소 문자가 다른 URL을 실제 페이지로 리디렉션하지 않는 경우 발생할 수 있습니다. 적절한 예 : developer.android.com/reference/android/view/View.htmldeveloper.android.com/reference/android/view/view.html .
JAB

7

이런 식으로 사용해야합니다

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

모든 공간을로 바꿉니다 %20. 또는 원본 링크를 복사하여 Chromium Browser 주소 표시 줄에 붙여 넣는 것이 좋습니다. 자동으로 포맷됩니다. 이제 거기에서 터미널로 복사하십시오.


2
이 방법은 경우에 따라 보안 위험이 될 수 있습니다. Chromium이 이미 열려 있으면 [Ctrl]+[Shift]+[J](개발 콘솔의 경우)을 누르고 삽입 하는 가장 빠른 방법 일 것입니다 decodeURIComponent("your-decoded-URI").
ComFreek

4

Wget은 URL의 형식이 다음과 같아야합니다.

[protocol://]host/path

프로토콜은 선택 사항입니다. protocol 이 없으면 Wget은 HTTP를 가정합니다.

Wget은 퍼센트로 인코딩 된 URL 만 허용하지만 protocol , hostpath 사이의 구분 기호는 퍼센트로 인코딩 할 수 없습니다.

이것이 Wget이 URL의 케이스를 변경 한 이유이기도합니다. 인코딩되지 않은 단일 슬래시를 찾지 못했기 때문에

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

호스트 이름입니다 (대소 문자를 구분하지 않음). 실제 호스트 이름은 물론 dl.minitoons.ir입니다.

자동 솔루션을 대체하는 %3A%2F%2F%2F에 의해 호스트 이름 후 :///충분하지만, 하나의 URL을 디코딩하는 데 단지 쉬운대로입니다. @Wilf는 이미 이에 대한 좋은 해결책을 제시했습니다.

그러나 Wget 명령을 수동으로 입력하려면 다음과 같이하십시오.

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

1

당신은 URL 주위에 따옴표를 넣어 완료해야합니다 :

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          

그렇게 쉽게하고 물건으로 자신을 당황 할 필요가 없습니다.


0

나는 그것을 위해 파이썬 스크립트를 작성했다.

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))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.