如何通过Curl函数获取Http状态代码和Vourbose日志

pu82cl6c  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(171)

我们尝试通过几个curl命令检查API连接和响应,如下所示,但我们有两个问题。

-- function
function exec_cmd() {
cmd=$@
echo "curl command:" ${cmd}
response=$(${cmd} --max-time ${timeout_sec} -o ${LogFile} -w '%{http_code}\n' -S)
echo statud_code:${response}
}

-- curl command#1 ...
exec_cmd curl -v -x put <LBFrontIP/ApiEndpoint1> -H 'Content-Type:application/json; charset=utf-8' -H 'Host:<HostName>' -d '{"SystemId":"XXXX", "AppNo":"99999999999"}'

-- curl command#2
exec_cmd curl -v -x put <LBFrontIP/ApiEndpoint2> -H 'Content-Type:application/json; charset=utf-8' -H 'Host:<HostName>' -d '{"sbSystemId":"XXXX", "email":"XXX@example.com", 
"PhoneNo":"99999999999"}'

-- curl command#3
exec_cmd curl -v -x put <LBFrontIP/ApiEndpoint3> -H 'Content-Type:application/json; charset=utf-8' -H 'Host:<HostName>' -d '
{
    "ID1": "XXXXX",
    "ID2": "1q2w3e4r5t",
    "applyNo": "00db182faef74e779ca958681127bcec", ...
    "docLiveScore": "0.1391"
}'

问题1:cmd=$@可以获取curl命令,但如果curl命令包含@或返回代码,则无法按预期方式工作。curl命令#1工作正常,但curl命令#2和#3工作不正常,因为bash将数据选项中的@和返回代码误解为命令行的终止。不过Curl命令可以自己工作。还尝试了cmd=$* 或cmd="$@”但到目前为止还不起作用。
问题#2:我们想得到status_code来进行快速检查,但同时,我们想得到日志中的详细响应。有没有更好的方法通过适当的函数同时得到status_code和详细日志?
以上命令覆盖详细日志...

p4tfgftt

p4tfgftt1#

考虑到所涉及的命令的复杂性,我很想说您应该避免命令解析,而从作业配置文件中读取命令行。

#!/bin/bash

START=`pwd`
echo ${START}
BASE=`basename "$0" ".sh" `
ThisDATE=`date '+%Y%m%d_%H%M%S' `

LogPrefix="${START}/${BASE}.${ThisDATE}"        ; rm -f "${LogPrefix}"*
BatchFile="${START}/${BASE}.${ThisDATE}.config"     ; rm -f "${BatchFile}"

cat >$BatchFile <<-!EnDoFbAtCh
curl -v -x put <LBFrontIP/ApiEndpoint1> -H 'Content-Type:application/json; charset=utf-8' -H 'Host:<HostName>' -d '{"SystemId":"XXXX", "AppNo":"99999999999"}'
curl -v -x put <LBFrontIP/ApiEndpoint2> -H 'Content-Type:application/json; charset=utf-8' -H 'Host:<HostName>' -d '{"sbSystemId":"XXXX", "email":"XXX@example.com", "PhoneNo":"99999999999"}'
curl -v -x put <LBFrontIP/ApiEndpoint3> -H 'Content-Type:application/json; charset=utf-8' -H 'Host:<HostName>' -d '{ "ID1": "XXXXX", "ID2": "1q2w3e4r5t", "applyNo": "00db182faef74e779ca958681127bcec", ...  "docLiveScore": "0.1391" }'
!EnDoFbAtCh

function exec_cmd() {
    echo "curl command: ${cmd}"
    ${cmd} --max-time ${timeout_sec} -o ${LogFile} -w '%{http_code}\n' -S
    RC=$?
    echo "statud_code:${RC}"
}

index=1
while read cmd
do
    if [ -z "${cmd}" ] ; then  break ; fi

    LogFile="${LogPrefix}.${index}.log"

    exec_cmd

    index=`expr ${index} + 1 `
done < "${BatchFile}"

相关问题