컬을 사용하여 URL의 리디렉션 대상 가져오기

컬을 사용하여 URL의 리디렉션 대상 가져오기

단일 URL이 어디로 리디렉션되는지 확인하고 싶습니다. 예를 들어 Google 검색 결과 페이지의 링크(클릭은 항상 Google 서버를 통과함)입니다.

내가 이걸 할 수 있을까 curl?

답변1

더 간단한 방법이 있습니다

curl -w "%{url_effective}\n" -I -L -s -S $URL -o /dev/null

그것은 인쇄됩니다

http://raspberrypi.stackexchange.com/questions/1508/how-do-i-access-the-distributions-name-on-the-command-line/1521

URL용

http://raspberrypi.stackexchange.com/a/1521/86

답변2

이 시도:

$ LOCATION=`curl -I http://raspberrypi.stackexchange.com/a/1521/86 | perl -n -e '/^Location: (.*)$/ && print "$1\n"'`
$ echo "$LOCATION"
/questions/1508/how-do-i-access-the-distributions-name-on-the-command-line/1521#1521

구글 리디렉션

Google 리디렉션 URL은 약간 다릅니다. 쉽게 처리할 수 있는 Javascript 리디렉션을 반환하지만, gocurl과 함께 원래 URL을 처리하는 것은 어떨까요?

$ URL="http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CFAQFjAA&url=http%3A%2F%2Fwww.raspberrypi.org%2F&ei=rv8oUODIIMvKswa4xoHQAg&usg=AFQjCNEBMoebclm0Gk0LCZIStJbF04U1cQ"
$ LOCATION=`echo "$URL" | perl -n -e '/url=([a-zA-Z0-9%\.]*)/ && print "$1\n"'`
$ echo "$LOCATION"
http%3A%2F%2Fwww.raspberrypi.org%2F
$ echo "$LOCATION" | perl -pe 's/%([0-9a-f]{2})/sprintf("%s", pack("H2",$1))/eig'
http://www.raspberrypi.org/

인용하다

  1. URL 디코딩의 경우...

답변3

곱슬완료되면 리디렉션을 따르고 변수를 인쇄하도록 구성할 수 있습니다. 따라서 귀하가 요청한 내용은 다음 명령을 사용하여 얻을 수 있습니다.

curl -Ls -w %{url_effective} -o /dev/null https://google.com

매뉴얼 페이지에서는 필요한 매개변수를 다음과 같이 설명합니다.

-L, --location          Follow redirects (H)
-s, --silent            Silent mode (don't output anything)
-w, --write-out FORMAT  Use output FORMAT after completion
-o, --output FILE       Write to FILE instead of stdout

답변4

매개변수는 -L (--location)여전히 -I (--head)location-url에 불필요한 HEAD 요청을 만듭니다.

여러 리디렉션이 없을 것이라고 확신하는 경우 위치 추적을 비활성화하고 컬 변수 %{redirect_url}을 사용하는 것이 좋습니다.

이 코드는 지정된 URL에 대해 HEAD 요청을 하나만 수행하고 위치 헤더에서 리디렉션_url을 가져옵니다.

curl --head --silent --write-out "%{redirect_url}\n" --output /dev/null "https://goo.gl/QeJeQ4"

관련 정보