我有以下格式的卷曲请求
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 }
我看到篇文章,但不知道该如何发送没有花括号的json正文。我知道我们可以将其保存为file.json并将其用作正文。但是由于某些原因,在我的方案中无法实现
通常,应避免尝试使用字符串插值构建JSON。使用类似jq处理任何必要报价的工具。
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
echo '{"logs": ...' | curl ...
的@-参数--data表示要从标准输入中读取。
@-
--data