Curl

cURL 跟踪重定向並獲取所有 URL

  • July 22, 2021

我編寫了一個簡單的 bash 腳本,它獲取一個 URL 列表並輸出一個 CSV,其中每個都有一些數據:url、狀態程式碼和目標 url:

while read url
do
   urlstatus=$(curl -H 'Cache-Control: no-cache' -o /dev/null --silent --head --insecure --write-out '%{http_code} , %{redirect_url}' "$url" -I )
   echo "$url , $urlstatus" >> "$1-out.csv"
done < $1

有時一個 URL 有 2 或 3 個重定向,我想全部獲取它們並將它們列印在輸出文件中。

我找到了最後一個 URL的-L選項和過濾器:%{url_effective}

   urlstatus2=$(curl -H 'Cache-Control: no-cache' -o /dev/null --silent --head --insecure --write-out ' , %{url_effective}' "$url" -L -I )

但我想擁有從源到最終的所有 URL,並將它們添加到 csv 中。

做一個遞歸函式:

#!/bin/bash
get_redirects(){
   i=${2:-1}
   read status url <<< $(curl -H 'Cache-Control: no-cache' -o /dev/null --silent --head --insecure --write-out '%{http_code}\t%{redirect_url}\n' "$1" -I)
   printf '%d: %s --> %s\n' "$i" "$1" "$status";
   if [ "$1" = "$url" ] || [ $i -gt 9 ]; then
       echo "Recursion detected or more redirections than allowed. Stop."
   else
     case $status in
         30*) get_redirects "$url" "$((i+1))"
              ;;
     esac
   fi
}

用法:

$ get_redirects https://aep-beta.onpc.fr/lycees/dom/region/DOM/ECOL
https://aep-beta.onpc.fr/lycees/dom/region/DOM/ECOL --> 301
https://aep-beta.onpc.fr/onglet/lycee/dom --> 301
https://aep-beta.onpc.fr/onglet/lycee/outre-mer --> 200

引用自:https://unix.stackexchange.com/questions/637531