仅当 HTTP 状态代码为 200 时,如何将 URL 记录到文件中?

仅当 HTTP 状态代码为 200 时,如何将 URL 记录到文件中?

我想制作一个脚本,以便检查是否可以连接到多个 URL。

例如我curl -i -L --silent URL | grep "HTTP/2 200" >> *.txt

我想将它与 if 语句结合起来,这样我就可以做到if grep "HTTP/" 200" >> *.txt", then: grep "Location" >> *.txt

因此,如果它确实 grep “HTTP/2 200”,那么它也应该 grep “位置”(URL)。但我无法让它工作。

我还想echo "-------------------------------------"在每个 URL 输出之间执行此操作,以便它在文件中显示如下:

#URL1

HTTP(1)

URL(1)

#URL2

HTTP(2)

URL(2)

等等。

谢谢你的帮助。

答案1

如果你想要HTTP 响应/状态网址保存为您想要的格式的文件。然后curl仅凭这一点就能做到这一点……它有选择权-w--write-out它定义了操作成功完成之后在 stdout 上显示的内容。格式是一个字符串,可能包含纯文本和任意数量的变量...例如-w "-----------\nStatus: %{http_code}\nURL: %{url}\n"),如果将其余输出重定向到 eg,/dev/null那么您最终会得到您想要的干净结果,然后您可以重定向该结果并将其附加到名为 eg 的文件中,url.txt如下所示:

curl -o /dev/null -s -w "-----------\nStatus: %{http_code}\nURL: %{url}\n" https://askubuntu.com >> url.txt

如果你有一个 URL 列表(每行各占一行)在一个名为list.txt例如这样的文件中:

$ cat list.txt
https://askubuntu.com/
https://unix.stackexchange.com/
https://notworkingurlblabla.com/

然后,你可以检查该文件中的所有 URL,过滤掉 200状态 URL 并将结果url.txt一次性附加到所有内容,例如:

xargs -n 1 <list.txt curl -o /dev/null -s -w "%{http_code} %{url}\n" | \
awk '{if ($1 == "200") printf "------------\nStatus: "$1"\nURL: "$2"\n"}' >> url.txt

显然,您也可以使用awk单个 URL 来过滤输出,如下所示:

curl -o /dev/null -s -w "%{http_code} %{url}\n" https://askubuntu.com/ | \
awk '{if ($1 == "200") printf "------------\nStatus: HTTP "$1"\nURL: "$2"\n"}' >> url.txt

相关内容