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辅助作者原创,未经许可,转载请保留原文链接。

发表评论