Bash CURL GET 请求输出到单个 JSON 文件,包括服务器响应和 CURL 信息
Posted
技术标签:
【中文标题】Bash CURL GET 请求输出到单个 JSON 文件,包括服务器响应和 CURL 信息【英文标题】:Bash CURL GET Request output to a single JSON file including server response and CURL Information 【发布时间】:2022-01-14 22:40:08 【问题描述】:我正在使用 shell 脚本执行 curl 测试,我需要将 curl 服务器响应连同 time_connect、http_code 等 CURL 信息一起保存到 JSON 中。我正在尝试使用以下代码将输出写入 JSON
HOST_ADDR="http://$mynds/"
do_request()
echo $(curl $HOST_ADDR --silent -w "\n\n
\"HttpCode\": %http_code,\n
\"NumRedirects\":%num_redirects,\n
\"NumConnects\":%num_connects,\n
\"SizeDownloadInBytes\":%size_download,\n
\"SizeHeaderInBytes\":%size_header,\n
\"SizeRequestInBytes\":%size_request,\n
\"SizeUploadInBytes\":%size_upload,\n
\"SpeedUploadBPS\":%speed_upload,\n
\"SpeedDownloadBPS\":%speed_download,\n
\"TimeAppConnectSec\":%time_appconnect,\n
\"TimeConnectSec\":%time_connect,\n
\"TimeNamelookupSec\":%time_namelookup,\n
\"TimePreTransferSec\":%time_pretransfer,\n
\"TimeRedirectSec\":%time_redirect,\n
\"TimeStartTransferSec\":%time_starttransfer,\n
\"TimeTotalSec\":%time_total,\n
\"UrlEffective\":\"%url_effective\"
" -s)
do_request
我得到的简单输出:
"hostIPAddr":"0.0.0.0","hostname":"vm01","text":"Hello World from
vm01"` and ` "HttpCode": 200, "NumRedirects":0, "NumConnects":1,
"SizeDownloadInBytes":85, "SizeHeaderInBytes":263,
"SizeRequestInBytes":99, "SizeUploadInBytes":0,
"SpeedUploadBPS":0.000, "SpeedDownloadBPS":14.000,
"TimeAppConnectSec":0.000000, "TimeConnectSec":5.553587,
"TimeNamelookupSec":5.097553, "TimePreTransferSec":5.553868,
"TimeRedirectSec":0.000000, "TimeStartTransferSec":5.827584,
"TimeTotalSec":5.827704, "UrlEffective":"http://dns"
我得到两个 JSON 输出,一个用于 curl 信息,一个来自服务器。如何将这两个输出组合成一个 JSON 变量?请帮忙。
【问题讨论】:
您可以使用jq
从 bash 生成 JSON。在this thread中有解释。
也使用jq
来生成请求,因为字符串插值不能正确引用值。
【参考方案1】:
guid_id=$(uuidgen)
file_1="curlJsonRes_$guid_id.json"
file_2="curlMetaRes_$guid_id.json"
do_request()
echo $(curl $HOST_ADDR --silent --output $file_1 -w "\n\n
\"HttpCode\": %http_code,\n
\"NumRedirects\":%num_redirects,\n
\"NumConnects\":%num_connects,\n
")
> $file_2
do_request
#Merging file outputs
echo $(jq -s '.[0] * .[1]' $file_1 $file_2) > $RESULTS_FILE
rm $file_1
rm $file_2
【讨论】:
以上是关于Bash CURL GET 请求输出到单个 JSON 文件,包括服务器响应和 CURL 信息的主要内容,如果未能解决你的问题,请参考以下文章