使用POST在curl命令中传递带空格的值

时间:2018-10-22 13:16:40

标签: shell http curl post

我试图在curl POST方法中传递带有空格的值。我通过txt文件定向值。 POST命令不允许我使用for循环来传递带有空格的值,但是当我不使用while循环来传递它时,它将接受没有任何错误的值。

下面是命令

这很好用

curl -d '{"name": "equity calculation support", "email": "email@test.com"}' -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "Content-Type: application/json" -H "Accept: application/json" -X POST http://localhost:3000/api/teams
{"message":"Team created","teamId":103}

在使用while循环和IFS时,它不会使用带空格的值:

while IFS= read -r line ; do curl -d '{"name": "'$line'"}' -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "Content-Type: application/json" -H "Accept: application/json" -X POST 'http://localhost:3000/api/teams'; done < /tmp/group.txt

group.txt文件包含值。

1 个答案:

答案 0 :(得分:0)

您没有引用$line的扩展名:

while IFS= read -r line ; do
  curl -d '{"name": "'"$line"'"}' \ 
    -H "Authorization: Basic YWRtaW46YWRtaW4=" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -X POST 'http://localhost:3000/api/teams'
done < /tmp/group.txt

但是,最好让jq之类的工具来生成JSON,以确保$line中需要转义以生成正确JSON的任何字符的确会被转义。

while IFS= read -r line; do
  d=$(jq -n --argjson x "$line" '{name: $x}')
  curl -d "$d" ...
done < /tmp/group.txt

您要创建的JSON似乎可以放在一行中,因此您也可以通过一次调用/tmp/group.txt来处理jq的所有内容,并将其输出传递到循环中。

jq -c -R '{name: .}' | while IFS= read -r line; do
  curl -d "$line" ...
done