应使用curl -o /dev/null -s -w "%{http_code}" URL静默获取状态码,避免响应体干扰;加-f可使非2xx/3xx响应返回非零退出码便于判断,注意底层错误(如DNS失败)会导致%{http_code}为空,需依赖退出码捕获。

只看状态码:用 -w 输出 HTTP 状态,别让响应体干扰判断
很多人直接 curl http://example.com/health,结果输出一堆 HTML 或 JSON,还得肉眼找 200。真正做健康检查或脚本判断时,必须屏蔽响应体,只取状态码。
-
curl -o /dev/null -s -w "%{http_code}\n" http://example.com/health:静默请求,只打印状态码(如200、503) - 加
-f可让 curl 在非 2xx/3xx 响应时返回非零退出码,方便if判断:if curl -f -s -o /dev/null -w "%{http_code}" http://x; then echo ok; else echo fail; fi - 注意:
%{http_code}只在请求“完成”后才有值;DNS 失败、连接拒绝等底层错误不会触发它,此时整个-w输出为空,需靠退出码捕获
分阶段测延迟:DNS、TCP、TLS、首字节各耗多少时间
单纯看 time_total 没法定位瓶颈。比如接口慢,是 DNS 解析卡了?还是 TLS 握手拖住了?得拆开看。
- HTTPS 必须显式加
%{time_appconnect}才能测 TLS 握手,否则%{time_connect}只到 TCP 建连为止 - 正确写法:
curl -s -o /dev/null -w "DNS:%{time_namelookup}, TCP:%{time_connect}, TLS:%{time_appconnect}, TTFB:%{time_starttransfer}, Total:%{time_total}\n" https://example.com - 若
%{time_appconnect}为0.000,不一定是快——可能是服务端用了 TLS 1.3,握手和首字节合并了,此时更该看%{time_pretransfer} - 本地 hosts 或 DNS 缓存会让
%{time_namelookup}虚低,要测真实公网解析,加--dns-servers 8.8.8.8(需 curl ≥ 7.33.0)
脚本里持续探测:用 while 循环 + 超时 + 重试逻辑
单次测试没意义,生产环境需要带间隔、可中断、失败能反馈的轮询。
父母的功课——育儿心理学对话支持技能(心虫增强版)。提供结构化对话、情绪识别、场景匹配与安全检测;可选Python脚本(scripts/)在SKILL_DIR/data/本地存储评估历史、洞察与会话状态,不对外传输。核心路径:觉察(看见防御)→接纳(慈悲是……
- 基础循环(每 3 秒测一次,带耗时):
while true; do curl -s -o /dev/null -w "HTTP:%{http_code} TTFB:%{time_starttransfer}s\n" http://localhost:8080/readyz; sleep 3; done - 防误判加超时:
curl -m 3 -s -o /dev/null -w "%{http_code}" http://x中-m 3是总超时(含 DNS、连接、传输),不是仅连接超时 - 启动中服务常需重试,用
for尝试 5 次,成功就退出:for i in {1..5}; do curl -m 2 -f -s -o /dev/null -w "%{http_code}" http://x && break || sleep 1; done - 别用
timeout包裹 curl——它会杀掉整个进程,无法拿到-w输出;curl 自身的-m和--connect-timeout更精准
HTTPS 证书问题怎么快速区分:是连不通,还是证书错
看到 SSL certificate problem 类错误,第一反应不该是加 -k,而是先确认到底是哪一层挂了。
- 先用
curl -v https://example.com看详细过程,重点找两行:
– 若卡在* Trying x.x.x.x:443...后无下文 → 网络层不通或防火墙拦截
– 若出现* SSL certificate verify failed→ 确实是证书问题 - 临时跳过校验只用于连通性验证:
curl -k -s -o /dev/null -w "%{http_code}" https://x,但绝不能用于生产环境的状态判断 - 想确认证书是否被系统信任,用
curl --cacert /etc/ssl/certs/ca-certificates.crt https://x显式指定 CA 包,比默认行为更可控
实际跑起来你会发现,%{time_namelookup} 和 %{time_appconnect} 这两个字段最容易被忽略,也最常误导排查方向——前者受本地缓存影响极大,后者在 TLS 1.3 下行为反直觉。测之前先 curl -V | grep SSL 确认你的版本是否支持所需特性,比硬调参数更省时间。

















