Я должен получить заключительный URL после перенаправления страницы предпочтительно с завихрением или wget.
Например, 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 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,а это не то, что входит в вопрос, и рискует изменить то, что делает сервер. Иногда серверы плохо реагируют на HEAD, даже если они хорошо реагируют на GET.
Спасибо. В итоге я реализовал ваши предложения: 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
Возвращает пустое значение, если веб-сайт не перенаправляет, но для меня этого достаточно, поскольку он работает с последовательными перенаправлениями.
Могут быть ошибки, но на первый взгляд все работает нормально.
Вы можете использовать команду grep. wget тоже не сообщает вам, куда он перенаправляется? Просто найдите это.
Я не уверен, как это сделать с помощью curl, но libwww-perl устанавливает псевдоним GET.
$ 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
как еще один вариант:
$ 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>
Но он не идет дальше первого.