我有一个bash脚本,可以使用HTTPie调用多个API。我想捕获响应主体和HTTP状态代码。
这是我到目前为止所能做到的最好的:
rspBody=$( http $URL --check-status --ignore-stdin )
statusCode=$?
Run Code Online (Sandbox Code Playgroud)
命令替换使我可以获取主体,而“ --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"
Run Code Online (Sandbox Code Playgroud)
STDERR包含一个(通常)带有HTTP代码的3行消息,因此我将其转储到临时文件中,仍然能够捕获变量中的响应正文(来自STDOUT)。
然后,我解析该临时文件以查找数字,但这对我来说似乎很脆弱。