使用curl为文件上传的multipart/form-data

Ste*_*hen 2 curl multipart

我有一个服务器API,我根据Fiddler用来做文件的HTTP帖子的格式开发,这是一个multipart/form-data帖子.我正在尝试让curl做类似的事情(所以我可以停止使用Fiddler进行测试,而是让一个单独的程序调用以编程方式进行卷曲).

以下是它在Fiddler中的设置方式,这是我需要复制的内容.正在上传的文件是myfile.html:

---------------------------acebdf13572468
Content-Disposition: form-data; name="fieldNameHere"; filename="myfile.html"
Content-Type: text/html

<@INCLUDE *C:\myfiles\myfile.html*@>
---------------------------acebdf13572468--
Run Code Online (Sandbox Code Playgroud)

所以我需要的是curl生成类似的东西:特别是name = part,后面跟着这部分底部的文件内容.我试过这个:

curl -F "fieldNameHere=myfile.html" http://myapi.com/
Run Code Online (Sandbox Code Playgroud)

当我这样做时,它似乎完全忽略了我的文件.如果我添加-v,这是详细输出:

POST / HTTP/1.1
User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Host: perl-h4.factset.io
Accept: */*
Content-Length: 166
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------981301fdaeb3
Run Code Online (Sandbox Code Playgroud)

根本没有文件内容(它是一个大的HTML文件).所以我认为这里可能存在一些基本的东西.任何指针都会非常受欢迎.

另外,我已经检查了其他类似StackOverflow的问题:使用curl POST多部分/表单数据的正确方法是什么?

但他们基本上都是在做我喜欢做的事情.所以问题可能不是我的语法,而是其他一些原因,它不想读取文件.

Ada*_*ard 8

对于更复杂的请求:

curl
 -X POST "YOUR_API_URL"
 -H "Authorization: Bearer YOUR_TOKEN"
 -H "Accept: application/json"
 -H "Content-Type: multipart/form-data"
 -F "meta={\"YOUR_ATTRIBUTE\": \"YOUR_DATA\"};type=application/json"
 -F "text=PATH_TO_FILE;type=text/plain"
Run Code Online (Sandbox Code Playgroud)

您可以将多个块一起设置为一个请求。有关更多信息,请查看: https: //learn.microsoft.com/en-us/azure/digital-twins/how-to-add-blobs


Scr*_*omy 6

curl -X POST  -F fieldNameHere=@myfile.html  http://myapi.com/
Run Code Online (Sandbox Code Playgroud)

要么

-X POST由-F(每条评论)隐含,引号是可选的

curl -F "fieldNameHere=@myfile.html"  http://myapi.com/
Run Code Online (Sandbox Code Playgroud)

  • 哦,哇,所以问题是我缺少一个@符号。太棒了...谢谢。我猜这告诉curl这是一个实际文件的名称? (3认同)
  • 是的,差不多。 (3认同)