redirect后获取url

在页面redirect之后,我需要使用curl或wget来获得最终的url。

例如http://google.com可能会redirect到http://www.google.com

内容很容易得到(例如curl --max-redirs 10 http://google.com -L ),但是我只对最后的url感兴趣(在前一种情况下http://www.google。 com )。

有没有什么办法通过只使用Linux构build工具? (仅限命令行)

curl-w选项和子variablesurl_effective是你在找什么。

就像是

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

更多信息

 -L遵循redirect
 -s静音模式。 不要输出任何东西
 -o FILE将输出写入<file>而不是stdout
 -w格式完成后要输出的内容

更多

你可能想要添加-I (也就是一个大写的'i'),这将使得该命令不下载任何“主体”,但是它也使用HEAD方法,这不是问题所包含的和风险变化服务器在做什么 有时服务器对HEAD响应不好,即使对GET响应也很好。

谢谢,这帮助了我。 我做了一些改进,并将其包装在一个帮手脚本“finalurl”中:

 #!/bin/bash curl $1 -s -L -I -o /dev/null -w '%{url_effective}' 
  • -o输出到/dev/null
  • – 我不实际下载,只是发现最终的url
  • – 无声模式,没有进度条

这使得可以从这样的其他脚本调用命令:

 echo `finalurl http://someurl/` 

通常你可以用wget来做到这一点。 wget --content-disposition “url”此外,如果您添加-O /dev/null您将不会实际保存文件。

wget -O /dev/null --content-disposition example.com

作为另一种select:

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

但它不会超过第一个。

谢谢。 我结束了实现你的build议: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 

如果网站没有redirect,则返回空白,但这对我来说足够好,因为它对连续redirect起作用。

可能是越野车,但一目了然,它工作正常。

我不知道如何用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 somesite.com | perl -n -e '/^Location: (.*)$/ && print "$1\n"' 

你可以使用grep。 不会告诉你它在哪里redirect呢? 只是grep出来。