进行curl POST时出现“无效的凭据”

时间:2018-06-27 13:53:20

标签: shell rest curl post jenkins

我有以下格式的卷曲请求

curl -v -H "Content-Type:application/json" -H "x-user-id:xxx" -H "x-api-key:yyy" --data '{"logs":"'"${TEST_OUTPUT}"'","pass":"true | false"}' https://razeedash.one.qqq.cloud.com/api/v1/clusters/zzz/api/test_results

在我从MAC终端执行此操作时,此方法工作正常。但是同一条命令会抛出

13:49:26 {
13:49:26   "status": "error",
13:49:26   "message": "Invalid credentials"
13:49:26 }

我看到了this post,但不知道该如何发送没有花括号的json正文。我知道我们可以将其保存为file.json并将其用作正文。但是由于某些原因,在我的方案中无法实现

1 个答案:

答案 0 :(得分:1)

通常,您应该避免尝试使用字符串插值来构建JSON。使用jq之类的工具来处理所有必要的报价。

jq -n --argson o "$TEST_OUTPUT" '{logs: $o, pass: "true | false"}' |
    curl -v -H "Content-Type:application/json" \
            -H "x-user-id:xxx" \
            -H "x-api-key:yyy" \
            --data @- \
            https://razeedash.one.qqq.cloud.com/api/v1/clusters/zzz/api/test_results

但是,如果您可以像现在一样正确地生成JSON,则可以将jq命令替换为echo

echo '{"logs": ...' | curl ...

@-的{​​{1}}参数表示要从标准输入中读取。