我正在尝试使用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体。我试图用他们的答案来帮助我,但到目前为止我还没有运气。
答案 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