如何使用curl从bash变量中发布整个json字符串?

时间:2015-11-06 13:16:22

标签: json bash curl

我正在尝试使用curl从bash变量发布数据,但是,我无法让它工作。这是我正在使用的命令:

escape() { printf "%q" "$1"; }    

curl -d "$(escape "$client")" -X POST -v https://$server/clients

客户端变量如下所示:

{"roles":["test"],"softwareName":"Some Soft","passwordSalt":"aaa","clientID":"full-client-2","contactPerson":"Test","contactPersonEmail":"a@b.org","description":"test","name":"Full Client-2","organization":"Some Org","passwordAlgorithm":"sha512","passwordHash":"bbb"}

在服务器上我收到以下内容:

{ '{"roles":': { '"test"': { '\"test\"\': '' } } }

我认为这是逃避的问题,但我无法弄明白。

我已经在这里看了很多关于此问题的其他问题,但似乎大多数人需要将变量插入到他们试图发布的文字中。我的问题是使用整个变量作为json体。我试图用他们的答案来帮助我,但到目前为止我还没有运气。

1 个答案:

答案 0 :(得分:3)

不要试图引用它;使用这里的文件:

curl -d@- -X POST -v https://"$server"/clients <<JSON
{"roles":["test"],"softwareName":"Some Soft","passwordSalt":"aaa","clientID":"full-client-2","contactPerson":"Test","contactPersonEmail":"a@b.org","description":"test","name":"Full Client-2","organization":"Some Org","passwordAlgorithm":"sha512","passwordHash":"bob"}
JSON

@-告诉-d选项查看数据的标准输入,而不是使用硬编码字符串。

如果文本在变量中,则不需要做任何其他事情;只需引用变量以防止shell处理它:

curl -d "$client" -X POST -v https://"$server"/clients