【问题标题】:Bash - How to get http response body and status code?Bash - 如何获取 http 响应正文和状态码?
【发布时间】:2018-02-19 22:37:31
【问题描述】:

我正在尝试以下代码来获取响应正文和状态:

read -ra result <<< $(curl -i --insecure \
    -H "Accept: application/json" \
    -H "Content-Type:application/json" \
    -X POST --data "$configData" $openingNode"/voice/v1/updateWithPh")
status=${result[1]}
response=${result[@]}
echo $status

这里的问题是 -

我正确地获得了状态代码和响应正文。 但是当我创建一个 bash 函数并将其作为参数发送时,响应正文在函数中更改为 "HTTP/1.1" ,如下所示。

echo $(validateUpdate $configData $response)

函数代码 -

function validateUpdate(){
   echo $1
   echo $2
}

$2 打印为 "HTTP/1.1"

是什么原因?如何解决这个问题?

【问题讨论】:

  • 也许你在$configData 中有一个换行符。您可以尝试引用您的变量吗:echo $(validateUpdate "$configData" "$response")
  • 贴一个${result[@]}的例子

标签: bash shell curl


【解决方案1】:

您需要将变量括在双引号中,以防止 bash 将其拆分为单独的标记。

试试

echo $(validateUpdate "$configData" "$response")

甚至更好(@tripleee 指出,echo 没用;而且花括号提高了可读性):

validateUpdate "${configData}" "${response}"

在你的函数中使用相同的东西

echo "$2"

【讨论】:

  • echo $(command) 通常写成command 更好,除非您特别要求 shell 在打印之前对来自command 的输出执行空格标记化和通配符扩展。另见useless use of echo
猜你喜欢
  • 2015-05-21
  • 1970-01-01
  • 2019-04-06
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多