shell Bash -如何获取HTTP响应体和状态码?

igsr9ssn  于 12个月前  发布在  Shell
关注(0)|答案(2)|浏览(160)

我正在尝试下面的代码来获取响应主体和状态:

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”**
是什么原因呢?如何纠正这一问题?

7vux5j2d

7vux5j2d1#

你需要将变量用双引号括起来,以防止bash将其拆分为单独的token。
尝试

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

或者更好(正如@tripleee指出的那样,echo是无用的;此外,花括号提高了可读性):

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

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

echo "$2"
sycxhyv7

sycxhyv72#

使用这个:

RESPONSE=$(curl --request POST \
  --url $URL \
  -w "\n%{http_code}" \
  -s)

RESPONSE_CODE=$(tail -n1 <<< "$RESPONSE")
RESPONSE_BODY=$(sed '$ d' <<< "$RESPONSE")

echo "Response code = ${RESPONSE_CODE}"
echo "Response body = ${RESPONSE_BODY}"

相关问题