1. ホーム
  2. bash

[解決済み] URLのリストのHTTPステータスコードを取得するスクリプト?

2023-01-24 02:25:46

質問

私は、それらがまだ動作するかどうかを確認する必要があるURLのリストを持っています。私は私のためにそれを行うbashスクリプトを書きたいと思います。

私は、返されたHTTPステータスコード、すなわち、200、404、500などが必要なだけです。 それ以上はありません。

EDIT なお、ページが "404 not found" と表示されても、200 OK のメッセージが返ってくる場合は問題があります。Webサーバーの設定ミスですが、このケースを考慮する必要があるかもしれません。

これについては URL が "404" というテキストを含むページに飛ぶかどうかをチェックします。

どのように解決するのですか?

Curlには特定のオプションがあります。 --write-out というオプションがあります。

$ curl -o /dev/null --silent --head --write-out '%{http_code}\n' <url>
200

  • -o /dev/null は通常の出力を捨てます
  • --silent プログレスメーターを捨てる
  • --head は、GET の代わりに HEAD HTTP リクエストを行ないます。
  • --write-out '%{http_code}\n' は必要なステータスコードを表示します。

これを完全なBashスクリプトにまとめると。

#!/bin/bash
while read LINE; do
  curl -o /dev/null --silent --head --write-out "%{http_code} $LINE\n" "$LINE"
done < url-list.txt

(鷹揚な読者は、これがURLごとに1つのcurlプロセスを使用し、フォークとTCP接続のペナルティを課していることに気づかれるでしょう。複数の URL が 1 つの curl で結合されればより速くなりますが、curl がこれを行うために必要とするオプションの膨大な繰り返しを書き出すスペースはありません)。