如何在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
相关产品推荐
相关产品推荐

