0

curl只获取HTTP状态码:3种实用方法详解

2026.05.25 | youres | 12次围观

为什么需要只获取HTTP状态码

日常运维和开发中,我们经常需要检测网站是否正常运行。这时候,HTTP状态码是最直接的判断依据:200表示正常,404表示页面不存在,500表示服务器错误。问题是,curl默认会输出整个页面内容,不仅占用终端空间,还干扰我们对状态码的识别。

本文分享三种实用的curl技巧,帮你快速、干净地拿到HTTP状态码。每种方法都有适用场景,可以根据实际需求选择。

方法一:-I参数获取响应头

最简单的方式是使用-I参数,它会发送HEAD请求,只返回响应头而不下载页面内容。

curl -I https://www.example.com

输出类似:

HTTP/2 200
content-type: text/html; charset=UTF-8
date: Mon, 25 May 2026 09:00:00 GMT

第一行就包含状态码。如果想直接提取,可以配合grep命令:

curl -I https://www.example.com | grep HTTP

注意点

有些服务器对HEAD请求的响应与GET请求不同,可能返回不同的状态码。如果遇到异常,建议改用方法二。

方法二:-w参数提取状态码(推荐)

-w参数可以在请求结束后输出指定格式的信息。%{http_code}就是专门用来输出HTTP状态码的变量。

curl -s -o /dev/null -w "%{http_code}\n" https://www.example.com

这行命令的含义:

  • -s:静默模式,不显示进度条
  • -o /dev/null:把页面内容丢弃,不输出到屏幕
  • -w "%{http_code}\n":只输出状态码,末尾加换行

输出就是一个干净的状态码:

200

扩展用法

可以把状态码保存到变量,方便后续判断:

status=
echo "网站状态码: "

方法三:-s -o组合判断可用性

如果你需要的是"成功"或"失败"的判断,而不是具体状态码,可以这样写:

if curl -s -o /dev/null -w "%{http_code}" https://www.example.com | grep -q "^2\|^3"; then
    echo "网站正常"
else
    echo "网站异常"
fi

状态码200-399都算正常。

实战脚本:批量检测网站状态

有了上面的基础,可以写一个简单的批量检测脚本:

#!/bin/bash
# 批量检测网站状态

urls=(
    "https://www.example.com"
    "https://www.google.com"
    "https://www.github.com"
)

for url in ""; do
    status=
    echo " => "
done

运行结果:

https://www.example.com => 200
https://www.google.com => 200
https://www.github.com => 200

可以把这个脚本加入cron定时任务,定期检测自己的网站集群。

常见问题解答

1. 为什么返回的是000?

状态码000表示连接失败,可能是DNS解析错误、服务器不可达或SSL证书问题。可以加-v参数查看详细错误:

curl -v https://www.example-not-exist.com

2. Windows PowerShell怎么用?

Windows下可以直接用curl.exe(Windows自带):

curl.exe -s -o NUL -w "%{http_code}" https://www.example.com

注意Windows下空设备是NUL而不是/dev/null

3. 如何获取更多信息?

-w参数支持很多输出变量:

curl -s -o /dev/null -w "状态码: %{http_code}\n响应时间: %{time_total}s\nDNS解析: %{time_namelookup}s\n" https://www.example.com

总结

三种方法各有优劣:

  • -I参数:简单直观,适合手动调试
  • -w参数:精准输出,适合脚本自动化
  • -s -o组合:最安静,适合判断网站可用性

推荐在脚本中使用方法二,输出最干净,便于后续处理。

相关文章推荐

版权声明

本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论
882文章数 0评论数
作者其它文章