如何确定链接被重定向到的位置

如何确定链接被重定向到的位置

我目前正在编写一个更新文件的脚本。该文件有多个版本。重要的有静态链接。这些被重定向到实际文件,然后使用wget.我发现wget有一个标志可以打印收到的标头。有一个位置列表。标头中的最后一个位置是实际的 URL。我需要得到那个!

我的想法是用来wget -S获取标头(我需要另一个标志来阻止文件下载和创建)。然后使用管道解析这些行并捕获包含 的最后一行location。我想这可以通过使用来实现grep -l -i "location:" | tail -l。然后我应该留下一行可以轻松解析的内容。

所以命令看起来像这样:

# The -??? flag is the one that prevents the file from downloading. (I don't know it)
Location=$(wget -S -??? $URL | grep -l -i "location:" | tail -l)

我的问题是我必须使用什么标志才能不下载文件,wget或者是否有其他方法/命令来完成此操作?

答案1

你想要的是一个HEAD请求,但是wget不支持;curl做。

您的发行版很可能curl在存储库中。

curl -s -I $URL -L | awk '/Location: (.*)/ {print $2}' | tail -n 1

$ URL=http://unix.stackexchange.com/questions/89282/
$ curl -s -I $URL | awk '/Location: (.*)/ {print $2}' | tail -n 1
/questions/89282/how-to-figure-out-where-a-link-gets-redirected
$ _

这里:

  • -s防止curl显示进度条;
  • -I发出curlHEAD 请求;
  • -L进行curl以下重定向(感谢@brianstone),您可能想要或不想包含此内容,具体取决于您想要跟踪的重定向标头;
  • awk 脚本打印括号中的匹配表达式,即 URI 的本地部分。

相关内容