바람직하게 curl 또는 wget을 사용하여 페이지 리디렉션 후 최종 URL을 가져와야합니다.
예를 들어 http://google.com 은 http://www.google.com으로 리디렉션 될 수 있습니다 .
내용은 쉽게 구할 수 curl --max-redirs 10 http://google.com -L
있지만 (예 🙂 최종 URL (전의 경우 http://www.google.com ) 에만 관심이 있습니다.
Linux 내장 도구 만 사용하여이 작업을 수행 할 수 있습니까? (명령 줄 만 해당)
답변
curl
의 -w
옵션 과 하위 변수 url_effective
는 당신이 찾고있는 것입니다.
같은 것
curl -Ls -o /dev/null -w %{url_effective} http://google.com
더 많은 정보
-L 리디렉션 따르기 -s 무음 모드. 아무것도 출력하지 마십시오 -o FILE 출력을 stdout 대신 <file>에 기록합니다. -w FORMAT 완료 후 출력 할 내용
더
명령이 “body”를 다운로드하지 않도록 -I
하는 대문자 (대문자 i
)도 추가 할 수 있습니다. 그러면 HEAD 메서드도 사용됩니다. 이는 질문에 포함 된 것이 아니고 서버가 수행하는 작업을 변경할 위험이 있습니다. 때때로 서버는 GET에 잘 응답하더라도 HEAD에 잘 응답하지 않습니다.
답변
감사합니다. 도움이되었습니다. 몇 가지 개선 작업을 수행하고이를 도우미 스크립트 “finalurl”에 래핑했습니다.
#!/bin/bash
curl $1 -s -L -I -o /dev/null -w '%{url_effective}'
-o
출력/dev/null
-I
실제로 다운로드하지 말고 최종 URL 만 확인하세요.-s
무음 모드, 진행률 표시 줄 없음
이렇게하면 다음과 같은 다른 스크립트에서 명령을 호출 할 수 있습니다.
echo `finalurl http://someurl/`
답변
다른 옵션으로 :
$ curl -i http://google.com
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Sat, 19 Jun 2010 04:15:10 GMT
Expires: Mon, 19 Jul 2010 04:15:10 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 1; mode=block
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
그러나 그것은 첫 번째 것을 지나치지 않습니다.
답변
일반적으로 wget으로이 작업을 수행 할 수 있습니다. wget --content-disposition
“url”을 추가하면 -O /dev/null
실제로 파일을 저장하지 않습니다.
wget -O /dev/null --content-disposition example.com
답변
감사합니다. 나는 당신의 제안을 구현했습니다 : curl -i + grep
curl -i http://google.com -L | egrep -A 10 '301 Moved Permanently|302 Found' | grep 'Location' | awk -F': ' '{print $2}' | tail -1
웹 사이트가 리디렉션되지 않으면 공백을 반환하지만 연속 리디렉션에서 작동하므로 충분합니다.
버그가있을 수 있지만 한눈에 잘 작동합니다.
답변
이것은 작동합니다.
curl -I somesite.com | perl -n -e '/^Location: (.*)$/ && print "$1\n"'
답변
매개 변수 -L (--location)
와 -I (--head)
여전히 위치 URL에 대한 불필요한 HEAD 요청을 수행합니다.
리디렉션이 하나 이상 없을 것이라고 확신하는 경우 위치 추적을 비활성화하고 curl-variable % {redirect_url}을 사용하는 것이 좋습니다.
이 코드는 지정된 URL에 대해 하나의 HEAD 요청 만 수행하고 위치 헤더에서 redirect_url을 가져옵니다.
curl --head --silent --write-out "%{redirect_url}\n" --output /dev/null "https://""goo.gl/QeJeQ4"
속도 테스트
all_videos_link.txt
-YouTube로 리디렉션되는 goo.gl + bit.ly의 50 개 링크
1. 위치를 따르십시오
time while read -r line; do
curl -kIsL -w "%{url_effective}\n" -o /dev/null $line
done < all_videos_link.txt
결과 :
real 1m40.832s
user 0m9.266s
sys 0m15.375s
2. 위치를 따르지 않고
time while read -r line; do
curl -kIs -w "%{redirect_url}\n" -o /dev/null $line
done < all_videos_link.txt
결과 :
real 0m51.037s
user 0m5.297s
sys 0m8.094s