Получить URL-адрес после того, как завить перенаправляется
Мне нужно получить окончательный url-адрес после перенаправления страницы предпочтительно с помощью curl или wget.
например http://google.com может перенаправить на http://www.google.com.
содержимое легко получить(например. curl --max-redirs 10 http://google.com -L
), но меня интересует только конечный url (в первом случае http://www.google.com).
есть ли способ сделать это с помощью только linux buildin tools? (команда только строка)
8 ответов:
curl
' s-w
опция и переменная suburl_effective
это то, что вы находясь в поиске.что-то вроде
curl -Ls -o /dev/null -w %{url_effective} http://google.com
Подробнее
-L Follow redirects -s Silent mode. Don't output anything -o FILE Write output to <file> instead of stdout -w FORMAT What to output after completionбольше
вы, возможно, захотите, чтобы добавить
-I
(это прописнаяi
) а также, что сделает команду не загружать любое "тело", но затем он также использует метод HEAD, который не является то, что вопрос включен и риск изменения того, что делает сервер. Иногда серверы не отвечают хорошо на голову, даже когда они отвечают нормально, чтобы получить.
Спасибо, что помогли мне. Я сделал некоторые улучшения и завернул это в вспомогательный скрипт "finalurl":
#!/bin/bash curl -s -L -I -o /dev/null -w '%{url_effective}'
- -o выход в
/dev/null
- -Я на самом деле не скачать, просто откройте URL-адресом
- -s бесшумный режим, нет progressbars
Это позволило вызвать команду из других сценариев, как это:
echo `finalurl http://someurl/`
вы можете сделать это с wget обычно.
wget --content-disposition
" url " дополнительно, если вы добавляете-O /dev/null
вы не будете фактически сохранять файл.
wget -O /dev/null --content-disposition example.com
как еще один вариант:
$ 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>
но он не проходит мимо первого.
спасибо. Я закончил реализацию ваших предложений: curl-i + grep
curl -i http://google.com -L | egrep -A 10 '301 Moved Permanently|302 Found' | grep 'Location' | awk -F': ' '{print }' | tail -1
возвращает пустой, если сайт не перенаправляет, но это достаточно хорошо для меня, как это работает на последовательных перенаправлений.
может быть багги, но на первый взгляд он работает нормально.
Я не уверен, как это сделать с curl, но libwww-perl устанавливает get alias.
$ GET -S -d -e http://google.com GET http://google.com --> 301 Moved Permanently GET http://www.google.com/ --> 302 Found GET http://www.google.ca/ --> 200 OK Cache-Control: private, max-age=0 Connection: close Date: Sat, 19 Jun 2010 04:11:01 GMT Server: gws Content-Type: text/html; charset=ISO-8859-1 Expires: -1 Client-Date: Sat, 19 Jun 2010 04:11:01 GMT Client-Peer: 74.125.155.105:80 Client-Response-Num: 1 Set-Cookie: PREF=ID=a1925ca9f8af11b9:TM=1276920661:LM=1276920661:S=ULFrHqOiFDDzDVFB; expires=Mon, 18-Jun-2012 04:11:01 GMT; path=/; domain=.google.ca Title: Google X-XSS-Protection: 1; mode=block