使用来自文件的发布数据向 cURL 发送请求

问题描述 投票:0回答:6

我需要从命令行通过 cURL 发出 POST 请求。此请求的数据位于文件中。我知道通过 PUT 这可以使用

--upload-file
选项来完成。

curl host:port/post-file -H "Content-Type: text/xml" --data "contents_of_file"
http curl http-post command-line-interface
6个回答
548
投票

您正在寻找

--data-binary
论点:

curl -i -X POST host:port/post-file \
  -H "Content-Type: text/xml" \
  --data-binary "@path/to/file"

在上面的示例中,

-i
打印出所有标题,以便您可以看到发生了什么,并且
-X POST
明确表明这是一篇帖子。这两个都可以安全地省略,而不改变线路上的行为。文件的路径前面需要有一个
@
符号,以便
curl
知道从文件中读取。


112
投票

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

您需要做的就是让

--data
参数以
@
:

开头
curl -H "Content-Type: text/xml" --data "@path_of_file" host:port/post-file-path

例如,如果您的数据位于名为

stuff.xml
的文件中,那么您将执行以下操作:

curl -H "Content-Type: text/xml" --data "@stuff.xml" host:port/post-file-path

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


26
投票

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

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


8
投票

这里大多数答案都是完美的,但是当我为了我的特定问题来到这里时,我必须使用 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

5
投票

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

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

-F 'file=@path/to/file;type=<MIME_TYPE>

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

curl -X POST -F 'file=@path/to/file.csv;type=text/csv' https://test.com

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


1
投票

我必须使用 HTTP 连接,因为 HTTPS 上有默认的文件大小限制。

https://techcommunity.microsoft.com/t5/IIS-Support-Blog/Solution-for-Request-Entity-Too-Large-error/ba-p/501134

    curl -i -X 'POST' -F 'file=@/home/testeincremental.xlsx' 'http://example.com/upload.aspx?user=example&password=example123&type=XLSX'
© www.soinside.com 2019 - 2024. All rights reserved.