我有一个使用 HTTPie 调用多个 API 的 bash 脚本。我想同时捕获响应正文和 HTTP 状态代码。
这是我迄今为止管理过的最好的:
rspBody=$( http $URL --check-status --ignore-stdin )
statusCode=$?
命令替换让我得到了正文,“--check-status”标志给了我一个与代码族相对应的简化代码(例如 0、3、4 等)。
问题是我需要区分 401 和 404 代码,但我只得到 4。
有没有一种方法可以获取实际的状态代码,而无需将详细转储到文件中并解析内容?
[编辑]
这是我的解决方法,以防它对任何人有帮助,但如果你有一个更好的主意,我仍然想要一个更好的主意:
TMP=$(mktemp)
FLUSH_RSP=$( http POST ${CACHE_URL} --check-status --ignore-stdin 2> "$TMP")
STAT_FAMILY=$?
flush_err=$(cat "$TMP" | awk '{
where = match($0, /[0-9]+/)
if (where) {
print substr($0, RSTART, RLENGTH);
}
}' -)
rm "$TMP"
STDERR 包含一个(通常)包含 HTTP 代码的 3 行消息,因此我将其转储到一个临时文件中,并且仍然能够在变量中捕获响应正文(来自 STDOUT)。
然后我解析那个临时文件来寻找一个数字,但这对我来说似乎很脆弱。