通过Curl发送带有在File中指定的数据的POST请求

bre*_*ish 203 curl http http-post command-line-interface

我需要从命令行通过Curl发出POST请求.此请求的数据位于文件中.我知道通过PUT可以通过--upload-file选项完成.

curl host:port/post-file -H "Content-Type: text/xml" --data "contents_of_file"
Run Code Online (Sandbox Code Playgroud)

Ric*_*d J 306

你正在寻找这个--data-binary论点:

curl -i -X POST host:port/post-file \
  -H "Content-Type: text/xml" \
  --data-binary "@path/to/file"
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,-i打印出所有标题,以便您可以看到正在发生的事情,并-X POST明确指出这是一个帖子.在不改变导线上的行为的情况下,可以安全地省略这两者.文件的路径需要以@符号curl开头,因此知道从文件中读取.

  • `@`部分非常重要! (46认同)
  • @Tol182` -d`将导致`curl`去除换行符,但`--data-binary`不会. (10认同)
  • 实际上你可以使用-d标志 (8认同)
  • 对于那些无法让它工作的人,请确保您在标题中指定了内容类型! (5认同)
  • 如果您从与数据文件相同的路径执行curl命令,则它只是“--data-binary“@file””。 (2认同)

Gra*_*ray 37

我需要从命令行通过Curl发出POST请求.此请求的数据位于文件中...

你需要做的就是让--data参数以@:

curl -H "Content-Type: text/xml" --data "@path_of_file" host:port/post-file-path
Run Code Online (Sandbox Code Playgroud)

例如,如果您将文件中的数据调用,stuff.xml则可以执行以下操作:

curl -H "Content-Type: text/xml" --data "@stuff.xml" host:port/post-file-path
Run Code Online (Sandbox Code Playgroud)

stuff.xml文件名可以与该文件的相对或完整路径替换为: @../xml/stuff.xml,@/var/tmp/stuff.xml,...

  • 如果您需要发送命名字段,您还可以使用 `--data "name@stuff"`。 (2认同)

Luc*_*Liu 11

如果您使用表单数据上传文件,其中必须指定参数名称,您可以使用:

curl -X POST -i -F parametername=@filename host:port/xxx


Red*_*Boy 6

大多数答案在这里都很完美,但是当我因特定问题来到这里时,我必须使用 POST 方法上传二进制文件(XLSX 电子表格),我发现缺少一件事,即通常它不仅是您加载的文件,您可能还有更多表单数据元素如文件注释或文件标签等,就像我的情况一样。因此,我想在这里添加它,因为它是我的用例,以便它可以帮助其他人。

curl -POST -F comment=mycomment -F file_type=XLSX -F file_data=@/your/path/to/file.XLSX http://yourhost.example.com/api/example_url
Run Code Online (Sandbox Code Playgroud)


小智 5

我在将文件作为参数传递时遇到了类似的问题。使用 -F 允许文件作为表单数据传递,但文件的内容类型是 application/octet-stream。我的端点需要文本/csv。

您可以使用以下语法设置文件的 MIME 类型:

-F 'file=@path/to/file;type=<MIME_TYPE>'
Run Code Online (Sandbox Code Playgroud)

因此,对于 CSV 文件,完整的 cURL 命令如下所示:

curl -X POST -F 'file=@path/to/file.csv;type=text/csv' https://test.com
Run Code Online (Sandbox Code Playgroud)

这里有关于此选项和其他选项的良好文档:https://catonmat.net/cookbooks/curl/make-post-request#post-form-data