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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用POST在curl命令中使用空格传递值相关的知识,希望对你有一定的参考价值。

我试图在curl POST方法中传递带空格的值。我通过txt文件指导值。 POST命令不允许我使用for while循环传递带空格的值,但是当我在没有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文件包含值。

答案

你没有引用$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

以上是关于使用POST在curl命令中使用空格传递值的主要内容,如果未能解决你的问题,请参考以下文章

curl的$post传递多维数组

Curl 和 PHP - 如何通过 curl 通过 PUT、POST、GET 传递 json

如何检索使用 CURL 传递的 NodeJS 中的 POST 数据?

Curl和PHP - 如何通过PUT,POST,GET将json传递给curl

PHP模拟POST提交数据并获得返回值之CURL方法(使用PHP extension,然后使用php_curl.dll,很不错)

使用curl命令测试端口