You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中仅当第一个curl请求返回非200状态时执行第二个请求

解决curl根据HTTP状态码触发后续请求的问题

这个坑我之前踩过!默认情况下,curl的退出码只反映是否成功建立连接、完成数据传输,哪怕返回404、500这类HTTP错误状态码,它的退出码还是0(表示命令执行成功),所以你用||根本触发不了第二个请求。下面给你两种靠谱的解决方案:

方法1:用-f参数快速实现(针对4xx/5xx状态码)

curl有个-f/--fail参数,当服务器返回4xx或5xx的状态码时,会让curl以非0状态码退出,这样||就能正常工作了:

curl -sf "https://example.com/first" || curl -s "https://example.com/second"
  • -s是静默模式,避免输出多余信息;
  • -f会让curl在收到错误HTTP状态码时“假装失败”,触发后续的||分支。

注意:如果第一个请求是3xx重定向,curl默认会跟随重定向,最终判断的是重定向后的状态码。如果不想跟随重定向,加上--no-location参数即可。

方法2:手动捕获HTTP状态码(精准控制所有非200场景)

如果你需要只要不是200状态码就执行第二个请求(包括3xx重定向、4xx、5xx),可以手动提取状态码再做判断:

# 捕获第一个请求的HTTP状态码,丢弃响应内容
STATUS_CODE=$(curl -s -o /dev/null -w "%{http_code}" "https://example.com/first")

# 判断状态码不是200时执行第二个请求
if [ "$STATUS_CODE" -ne 200 ]; then
    curl -s "https://example.com/second"
fi
  • -o /dev/null:把响应内容输出到空设备,只保留状态码;
  • -w "%{http_code}":指定curl最后输出HTTP状态码;
  • 用if判断状态码不等于200时,执行第二个curl请求。

两种方法按需选择:追求简洁用方法1,需要精准控制状态码范围用方法2~

内容的提问来源于stack exchange,提问作者frosty22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:26:19