首页 > 解决方案 > 在 BASH 变量中合并 cURL 输出字符串

问题描述

我想让获取数据的过程自动化(我想要一个从汽车发送/接收数据的应用程序)。我可以通过复制/粘贴 cURL 查询的结果来手动执行此操作,但我想将其放入 BASH shell 脚本中,但我不知道如何将结果从一个 cURL 命令传输到下一个命令。这是一个例子:

result="$(curl -X POST -H "Cache-Control: no-cache" -H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW"\
        -F "grant_type=password" -F "client_id=$CLIENT_ID" -F "client_secret=$CLIENT_SECRET" -F "email=$EMAIL" -F "password=$PASSWORD"\
        "https://owner-api.teslamotors.com/oauth/token")"

输出是:

result:'{"access_token":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","token_type":"bearer","expires_in":3888000,"refresh_token":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","created_at":1592850440}'

其中 XXXXXXXXXXXXXXX 是隐藏条目。我是一名新手程序员,无法将结果(例如“access_token”)放入下一个 cURL 中:

curl --include --header "Authorization: Bearer {access_token}" "https://owner-api.teslamotors.com/api/1/vehicles"

有没有一种简单的方法可以使用 BASH 来做到这一点,还是使用 JavaScript 或 Python 更好?(我不是很擅长)。其他命令返回具有 10 个字段的更复杂的字符串。我想在 BASH shell 中操作这些变量(其中一些是实数,而不是字符串)。我试过 awk 但没有看到一个简单的方法来使用它。

标签: bashcurl

解决方案


您应该使用jq来处理 JSON 数据,或者更好地使用 Python 请求,这使得新手相处起来非常简单。使用普通的 shell 和 curl,您必须手动执行太多操作。


推荐阅读