“Invalid credentials” while doing a curl POST

2019-08-26 07:48发布

问题:

I have a curl request in below format

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

This works fine while I do from my MAC terminal. But the same command throws

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

I saw this post but not sure how else would I send a json body without curly braces. I know that we can save it as a file.json and use the file as body.But for some reasons that cannot be implemented in my scenario

回答1:

In general, you should avoid trying to build JSON using string interpolation. Use a tool like jq to handle any necessary quoting.

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

However, if you can manage to correctly generate your JSON as you are now, you can just replace the jq command with echo:

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

The @- argument to --data says to read from standard input.