unix - 在变量中获取 curl 命令的输出
问题描述
我需要从云平台获取数据。导出数据的过程分为 2 步:
- 首先使用用户名/密码详细信息进行邮政呼叫。这将在响应中返回带有 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_second_api_call),因为我想执行第二个 curl 语句并将输出存储在一个变量中。
问题: 当我执行 out=$($cmd_second_api_call) 时,我看到 out 变量为空。我验证了 $cmd_second_api_call 实际上完美地输出了 curl 命令。如果我在命令提示符下执行 $cmd_second_api_call 的输出,我会看到输出。我在这里想念什么?如何在变量中获取 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
解决方案
将命令放入变量或使用不带引号的变量可能很危险。
我建议
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"
不知何故,这sleep 5
在两个curl
电话之间都有帮助。您不会期望远程服务器在返回有效的 jobid 和启用该 jobid 的接口之间存在延迟。也许是某种“防御”,以防止使用随机 jobid 的未经授权的呼叫。
推荐阅读
- spring - “错误”:“invalid_grant”,“error_description”:“错误凭据”
- javascript - 函数输出函数文本而不是预期的输出
- swift - 从命令行快速主运行/构建
- java - 当输入导致 IndexOutOfBoundsException 时应该抛出哪个异常?
- assembly - ARMv8 程序集,如何将整数值转换为浮点值,以及如何打印?
- documentum - 如何做aa dql,获取文档的r_object_id和生命周期状态
- vb.net - Sharepoint 连接失败(Winforms、VB.Net)
- go - 如何使用模具包将空*字符串更改为零?
- html - 为什么 min-width:0 不适用于我的 flex 元素?
- string - 如何在 MIPS 上存储/读取字符串?