使用curl -f参数时,如何在非200状态码下显示响应体并返回错误?
解决curl异常状态码下既返回错误又显示响应体的问题
方法一:使用--fail-with-body参数(推荐)
从curl 7.76.0版本开始,新增了--fail-with-body参数,它的作用和-f(--fail)一致——当HTTP响应状态码为4xx或5xx时让curl返回非零退出码,但会同时输出响应体内容。
直接替换原有-f参数即可:
curl --fail-with-body https://example.com/api/endpoint
若请求返回4xx/5xx状态码,curl会返回非零值,同时将响应体打印到终端。
方法二:兼容旧版本curl的脚本方案
如果你的curl版本低于7.76.0,无法使用上述参数,可以通过脚本捕获响应内容与状态码,手动判断并返回对应退出码:
#!/bin/bash # 捕获响应内容和末尾追加的状态码 response=$(curl -w "\n%{http_code}" https://example.com/api/endpoint) # 分离响应体和状态码 body=$(echo "$response" | sed '$d') status_code=$(echo "$response" | tail -n1) # 打印响应体 echo "$body" # 判断状态码是否为异常(4xx/5xx),是则返回非零值 if [[ "$status_code" =~ ^[45][0-9]{2}$ ]]; then exit 1 fi
该脚本会先保存包含状态码的完整响应,分离出响应体和状态码后先打印内容,再根据状态码决定是否返回错误退出码。如果需要去除curl的进度输出,可在curl命令中添加-s参数。
内容的提问来源于stack exchange,提问作者PeaceSheep
相关产品推荐
相关产品推荐

