脚本获取URL列表的HTTP状态代码?
我有一个需要检查的URLS列表,以查看它们是否仍然有效。 我想写一个bash脚本来帮助我。
我只需要返回的HTTP状态码,即200,404,500等等。 而已。
编辑请注意,如果页面显示“404未找到”但返回200 OK消息,则会出现问题。 这是一个错误配置的网络服务器,但您可能需要考虑这种情况。
有关详细信息,请参阅检查URL是否转到包含文本“404”的页面
卷曲有一个特定的选项, --write-out
,为此:
$ curl -o /dev/null --silent --head --write-out '%{http_code}n' <url>
200
-o /dev/null
抛出通常的输出 --silent
丢弃进度计 --head
进行HEAD HTTP请求,而不是GET --write-out '%{http_code}n'
打印所需的状态码 要把它包装在一个完整的Bash脚本中:
#!/bin/bash
while read LINE; do
curl -o /dev/null --silent --head --write-out "%{http_code} $LINEn" "$LINE"
done < url-list.txt
(鹰眼读者会注意到,这对每个URL使用一个curl过程,这会导致fork和TCP连接的惩罚,如果将多个URL组合在一个卷曲中,但是没有空间来写出怪异的重复卷曲要求做的选项)。
wget --spider -S "http://url/to/be/checked" 2>&1 | grep "HTTP/" | awk '{print $2}'
只打印您的状态码
扩展Phil已经提供的答案。 如果在调用中使用xargs,则在bash中添加并行性在bash中是没有道理的。
代码如下:
xargs -n1 -P 10 curl -o /dev/null --silent --head --write-out '%{url_effective}: %{http_code}n' < url.lst
-n1:只使用一个值(来自列表)作为curl调用的参数
-P10:随时保持10个卷曲过程(即10个并行连接)
检查curl手册中的write_out
参数以获取更多可以使用它提取的数据(时间等)。
如果它帮助某人,这是我目前使用的呼叫:
xargs -n1 -P 10 curl -o /dev/null --silent --head --write-out '%{url_effective};%{http_code};%{time_total};%{time_namelookup};%{time_connect};%{size_download};%{speed_download}n' < url.lst | tee results.csv
它只是将一堆数据输出到一个csv文件中,该文件可以导入到任何办公室工具中。
链接地址: http://www.djcxy.com/p/7959.html上一篇: script to get the HTTP status code of a list of urls?
下一篇: What is the difference between HTTP status code 200 (cache) vs status code 304?