【问题标题】:how do I append a token to a url to pass to curl如何将令牌附加到 url 以传递给 curl
【发布时间】:2018-05-16 19:23:29
【问题描述】:

在 bash 脚本中,当我设置时:

myUrl="https://api.site.com/api/v2/export/123456"

然后运行:

awsAccess=$(curl -X GET $(echo "${myUrl}") \ --header "Accept: application/json" \ --header "Authorization: Bearer myAuthCode")

我得到了正确的 JSON 结果:

{"status":"Complete","total_files":1,"completed_files":1,"file_urls":["@987654321@"]}

但是当我获得这样的令牌时:

myToken=$(echo "${content}" | jq -r '.token' <<< "${myAccessJSON}")

设置myToken=123456

我像这样构建我的 URL 变量:

baseUrl="https://api.site.com/api/v2/export/" myUrl=$baseUrl$myToken

然后我运行:

awsAccess=$(curl -X GET $(echo "${myUrl}") \ --header "Accept: application/json" \ --header "Authorization: Bearer myAuthCode")

我收到以下 JSON 响应:

{"status":"Pending","total_files":1,"completed_files":0,"file_urls":[]}

其中不包含我需要下载我请求的文件的 URL。更奇怪的是,当我将上面的命令直接输入到 cli 中时,令牌会正确附加,并且我会收到带有所需 URL 的完整响应。如何通过 shell 脚本在我的 cURL 请求中传递与令牌连接的 URL?

【问题讨论】:

  • 如果在最后一个 curl 命令之前运行,echo $myTokenecho "${myUrl}" 会返回什么? GET $(echo "${myUrl}") 看起来也是多余的; GET ${myUrl} 怎么样?
  • jq 无法同时读取管道和此处的字符串。
  • echo $myToken成功返回token。
  • 嗯...我想你找到了 Will Cain,其中 echo $myUrl 返回带有标记的 URL,echo "${myUrl}" 返回一个空字符串。我正在尝试您的建议,现在使用 GET ${myUrl}

标签: json bash shell curl


【解决方案1】:

所以,我现在觉得有点傻。事实证明我的语法很好。我的脚本所做的是连接到服务器,请求令牌,然后重新连接到同一服务器以请求数据。我试图在一个批处理脚本中实现这一点。事实证明,当我使用在第一个连接上收到的令牌进行第二个连接以请求数据时,第一个会话仍然打开。因此,我没有将 JSON 响应写入 bash 会话变量,而是将第一个脚本的响应输出到文件并结束脚本,从而关闭连接。然后我使用第二个批处理脚本读取该文件并打开一个新连接,现在一切正常。

【讨论】:

    猜你喜欢
    • 2015-06-29
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    相关资源
    最近更新 更多