4

wget を使用して、リダイレクトされた Web サイト URL のリストを 1 つのファイルに記録する方法を見つけようとしていました。例えば:

www.website.com/1234にリダイレクトするようになりましたwww.newsite.com/a2as4sdf6nonsense

www.website.com/1235にリダイレクトするようになりましたwww.newsite.com/ab6haq7ah8nonsense

Wget はリダイレクトを出力しますが、新しい場所を記録しません。ターミナルでこれを取得します:

HTTP request sent, awaiting response...301 moved permanently
Location: http.www.newsite.com/a2as4sdf6 

...

その新しい URL をファイルにキャプチャしたいだけです。

私はこのようなものを使用していました:

    for i in `seq 1 9999`; do
        wget http://www.website.com/$i -O output.txt
    done

しかし、これは各 Web ページのソースコードをそのファイルに出力します。リダイレクト情報のみを取得しようとしています。また、新しい URL を取得するたびに、同じ出力ファイルに新しい行を追加したいと考えています。

出力を次のようにしたいと思います。

    www.website.com/1234 www.newsite.com/a2as4sdf6nonsense
    www.website.com/1235 www.newsite.com/ab6haq7ah8nonsense

...

4

1 に答える 1

2

これは完璧な解決策ではありませんが、機能します:

wget http://tinyurl.com/2tx --server-response -O /dev/null 2>&1 |\
   awk '(NR==1){SRC=$3;} /^  Location: /{DEST=$2} END{ print SRC, DEST}'

wgetそのための完璧なツールではありません。curl少し良いでしょう。

URL を取得しますが、すべての出力 (ページ コンテンツ) を /dev/null にリダイレクトします。サーバー応答の http ヘッダー (Loaction ヘッダーを取得するため) を要求し、それを awk に渡します。いくつかのリダイレクトが存在する可能性があることに注意してください。私はあなたが最後のものが欲しいと思いました。Awk は、最初の行 (NR==1) から要求された URL を取得し、各 Location ヘッダーから宛先 URL を取得します。最後に、必要に応じて SRC と DESC の両方を出力します。

于 2012-08-09T08:00:59.987 に答える