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

时间:2011-06-20 09:02:35

标签: http curl http-post command-line-interface

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

curl host:port/post-file -H "Content-Type: text/xml" --data "contents_of_file"

5 个答案:

答案 0 :(得分:274)

您正在寻找--data-binary参数:

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

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

答案 1 :(得分:25)

  

我需要从命令行通过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,...

答案 2 :(得分:9)

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

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

答案 3 :(得分:1)

大多数答案在这里都是完美的,但是当我因特殊问题而来到这里时,我不得不使用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

答案 4 :(得分:0)

我必须使用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'