Unix 获取变量中curl命令的输出
我需要从云平台获取数据。导出数据的过程分为两步:Unix 获取变量中curl命令的输出,unix,curl,output,Unix,Curl,Output,我需要从云平台获取数据。导出数据的过程分为两步: 首先使用用户名/密码详细信息进行post通话。这将在响应中返回带有jobid的xml输出 从第一个响应中获取jobid并使用这个jobid,将它连接起来以获得一个新的url,然后使用这个新的url进行get调用(再次执行curl),然后我将在json响应中获取数据 我所做的: 我能够进行第一次API调用并获得jobID。接下来,我连接这个jobId以获得新的url,并将完整的curl语句保存在一个变量中(让我们调用变量cmd_second_api
r=$(curl -k -u user:password static_url -d <data I need to pass>)
jobid=$(echo $r | sed -n 's:.*<jobid>\(.*\)<\/jobid>.*:\1:p')
second_url="abc.com/${jobid}/result/ --get -d output=json"
cmd_second_api_call="curl -u user:password -k ${second_url}"
out=$($cmd_second_api_call)
echo $out
r=$(curl-k-u用户:密码静态\u url-d)
jobid=$(echo$r | sed-n's:.*\(.*\).:\1:p')
second_url=“abc.com/${jobid}/result/--get-d output=json”
cmd_second_api_call=“curl-u user:password-k${second_url}”
out=$($cmd\u第二次\u api\u调用)
回音$out
将命令放入变量或使用不带引号的变量可能会很危险。我建议
out=$(curl -u user:password -k ${second_url})
# or
out=$(curl -u user:password -k abc.com/${jobid}/result/ --get -d output=json)
# and
echo "$out"
这在某种程度上是有帮助的,在两次
curl
调用之间加上sleep 5
。您不会期望远程服务器在返回有效的jobid和启用该jobid的接口之间出现延迟。也许可以用随机jobid对未经授权的呼叫进行某种“防御”。首先要习惯引用。使用out=“String With spaces and wildcard*”
可以获得不同的结果,其中echo$out
和echo“$out”
。也许可以尝试out=$(curl-u user:password-k${second\u url})
或out=$(curl-u user:password-k abc.com/${jobid}/result/--get-d output=json)
谢谢,这很有帮助。另外,在调用第二个api之前,我必须添加一个sleep5语句,因为我得到了一个无数据响应(响应代码204),而没有sleep语句。希望这对别人有帮助!