调试大型 URL 列表的 HTTP 状态代码

调试大型 URL 列表的 HTTP 状态代码

我有一个 URL 列表,我需要对其进行调试,以消除无效或无效的 URL。为此,我在 bash 中使用以下脚本(根据这篇文章):

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

问题是,这可能需要几天/几个月的时间,具体取决于列表的大小(在我的情况下是数百万行)。

有没有什么办法可以更快地完成这个任务?

答案1

如果你只是想知道该网站是否仍然存在,你可以使用 fping 命令,它会进行快速测试并可以接受包含网站列表的文件:

描述

fping 是一个类似的程序,它使用 Internet 控制消息协议 (ICMP) 回显请求来确定目标主机是否响应。fping 与 ping 的不同之处在于,您可以在命令行上指定任意数量的目标,或指定包含要 ping 的目标列表的文件。fping 不会向一个目标发送消息直到它超时或回复,而是会发送一个 ping 数据包并以循环方式转到下一个目标。

例子 :

fping < fping.txt

有关更多示例,请参阅 Fping - Linux 的高性能 Ping 工具

答案2

瓶颈可能是服务器响应时间的延迟,因此改变语言不太可能产生巨大的影响。

如果服务器很强大,您可以考虑并行启动请求,要么将列表分成几块并同时运行多个调用,要么将脚本重写为后台进程(但不要尝试同时打开所有内容,您需要限制自己(

另一种可能性可能是更具响应性但开销更低,并且如果您控制站点,则可以揭示其他用途 - 更改 vserver 的日志记录并查看人们看到的错误代码。您可能希望使用 nagios 之类的工具来额外监控延迟和远程视线可达性。

相关内容