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

我需要从云平台获取数据。导出数据的过程分为两步:

  • 首先使用用户名/密码详细信息进行post通话。这将在响应中返回带有jobid的xml输出
  • 从第一个响应中获取jobid并使用这个jobid,将它连接起来以获得一个新的url,然后使用这个新的url进行get调用(再次执行curl),然后我将在json响应中获取数据
  • 我所做的: 我能够进行第一次API调用并获得jobID。接下来,我连接这个jobId以获得新的url,并将完整的curl语句保存在一个变量中(让我们调用变量cmd_second_api_call)。这个变量'cmd_second_api_call'包含我需要执行的完整curl语句。 所以我做了一个out=$($cmd\u second\u api\u调用),因为我想执行第二个curl语句并将输出存储在一个变量中

    问题: 当我执行out=$($cmd\u second\u api\u调用)时,我看到out变量为空。我验证了$cmd_second_api_调用实际上完美地输出了curl命令。如果在命令提示符下执行$cmd_second_api_调用的输出,我会看到输出。我错过了什么?如何在变量中获得curl输出

    谢谢

    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语句。希望这对别人有帮助!