脚本获取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?