如何在bash脚本中使用HTTPie捕获实际的响应代码和响应体?

如何在bash脚本中使用HTTPie捕获实际的响应代码和响应体?,bash,httpie,Bash,Httpie,我有一个bash脚本,可以使用HTTPie调用几个api。我想捕获响应主体和HTTP状态代码 以下是我迄今为止管理得最好的: rspBody=$( http $URL --check-status --ignore-stdin ) statusCode=$? 命令替换允许我获取主体,“--check status”标志为我提供了与代码族对应的简化代码(如0、3、4等) 问题是我需要区分401和404代码,但我只得到4 有没有一种方法可以获得实际的状态代码,而不必详细地转储到文件中并解析内容 [

我有一个bash脚本,可以使用HTTPie调用几个api。我想捕获响应主体和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代码的三行消息,因此我将其转储到一个临时文件中,并且仍然能够在变量中捕获响应体(来自STDOUT)


然后我解析这个临时文件寻找一个数字,但这对我来说似乎很脆弱。

没有现成的解决方案,但只需编写一点脚本就可以实现。例如:

STATUS=$(http -hdo ./body httpbin.org/get 2>&1 | grep HTTP/  | cut -d ' ' -f 2)
BODY=$(cat ./body)
rm ./body
echo $STATUS
# 200
echo $BODY
# { "args": {}, "headers": { "Accept": "*/*", "Accept-Encoding": "identity", "Host": "httpbin.org", "User-Agent": "HTTPie/1.0.0-dev" }, "origin": "84.242.118.58", "url": "http://httpbin.org/get" }
命令说明:

http --headers \               # Print out the response headers (they would otherwise be supressed for piped ouput)
     --download \              # Enable download mode
     --output=./body  \        # Save response body to this file
     httpbin.org/get 2>&1 \    # Merge STDERR into STDOUT (with --download, console output otherwise goes to STDERR)
     | grep HTTP/  \           # Find the Status-Line
     | cut -d ' ' -f 2         # Get the status code

这也需要一个临时文件,但它更干净一些。谢谢显然我没有足够的代表投票给这个答案,对不起。啊,我发现我只是点击了复选标记。谢谢如果状态代码不是正数,则此代码将被破坏。