在curl中使用-d POST多个文件

时间:2018-03-04 22:45:50

标签: bash curl

我正在使用curl创建几个分类。我已经为许多分类编写了json,它们位于一个文件夹中。我想一次创建所有分类。但是使用curl我一次只能创建一个。我怎么能在一个请求中制作它们?

curl -u admin:admin -H "Content-Type: application/json" -X POST -d @pii.json  http://127.0.0.1:21000/api/atlas/v2/types/typedefs

-d的curl手册说“也可以指定多个文件”。我怎样才能做到这一点?我所有的尝试都失败了。

我需要一个bash脚本吗?如果是这样,你能不能帮助我 - 我不是一个程序员而且我没有一个例子而苦苦挣扎!

提前致谢。

3 个答案:

答案 0 :(得分:1)

我发现以下内容最终有效:

<fileToUpload.dat xargs -I %  curl -X POST -T "{%}" -u admin:admin -H "Content-Type: application/json" http://127.0.0.1:21000/api/atlas/v2/types/typedefs

其中fileToUpload.dat包含.json文件的列表。

这似乎与丹尼尔的答案有关,可能是由于文件的内容。如果丹尼尔的解决方案对他们不起作用,希望这对其他人有用。

答案 1 :(得分:0)

您可能不希望将多个-d与JSON数据一起使用,因为curl将多个&连接在一起。如-d / - data:

的手册页中所述
  

如果在同一命令中多次使用这些选项中的任何一个   在行中,指定的数据将与a合并在一起   分离&amp; -symbol。因此,使用'-d name = daniel -d skill = lousy'会   生成一个看起来像'name = daniel&amp; skill = lousy'的帖子块。

然而,您可以轻松方便地在stdin上传递几个文件,让curl一次性使用它们:

cat a.json b.json c.json | curl -d@- -u admin:admin -H "Content-Type: application/json" http://127.0.0.1:21000/api/atlas/v2/types/typedefs

(请注意-X POST在使用-d)的命令行中没有位置

答案 2 :(得分:0)

我需要通过curl上传一个文件夹中的所有* .json文件,然后我编写了这个小脚本。

nfiles=*.json
echo "Enter user:"
read user
echo "Enter password:"
read -s password
for file in $nfiles
do
    echo -e "\n----$file----"
    curl --user $user:$password -i -X POST "https://foo.bar/foo/bar" -H "Content-Type: application/json" -d "@$file"
done

也许符合您的需求。