使用 curl for multipart/form-data 上传文件
using curl for multipart/form-data with a file upload
我有一个服务器 API,我是根据 Fiddler 使用的格式开发的服务器 posts 文件,它是 multipart/form-data post。我正在尝试让 curl 做类似的事情(这样我就可以停止使用 Fiddler 进行测试,而是调用一个单独的程序以编程方式进行 curl)。
这是它在 Fiddler 中的设置方式,我需要复制它。正在上传的文件是 myfile.html:
---------------------------acebdf13572468
Content-Disposition: form-data; name="fieldNameHere"; filename="myfile.html"
Content-Type: text/html
<@INCLUDE *C:\myfiles\myfile.html*@>
---------------------------acebdf13572468--
所以我需要的是让 curl 产生类似的东西:特别是 name= 部分,然后是该部分底部的文件内容。我试过这个:
curl -F "fieldNameHere=myfile.html" http://myapi.com/
当我这样做时,它似乎完全忽略了我的文件。这是我添加 -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
根本没有文件内容(这是一个很大的 HTML 文件)。所以我认为我可能在这里缺少一些基本的东西。欢迎任何指点。
此外,我还检查了其他类似这样的 Whosebug 问题:What is the right way to POST multipart/form-data using curl?
但他们基本上是说要做一些像我在这里所做的事情。所以也许问题不是我的语法,而是它不想读取文件的其他原因。
curl -X POST -F fieldNameHere=@myfile.html http://myapi.com/
或
-X POST 由 -F 隐含(每个评论),引号是可选的
curl -F "fieldNameHere=@myfile.html" http://myapi.com/
对于更复杂的请求:
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"
您可以将多个块一起设置为一个请求。有关更多信息,请查看:https://docs.microsoft.com/en-us/azure/digital-twins/how-to-add-blobs!
我有一个服务器 API,我是根据 Fiddler 使用的格式开发的服务器 posts 文件,它是 multipart/form-data post。我正在尝试让 curl 做类似的事情(这样我就可以停止使用 Fiddler 进行测试,而是调用一个单独的程序以编程方式进行 curl)。
这是它在 Fiddler 中的设置方式,我需要复制它。正在上传的文件是 myfile.html:
---------------------------acebdf13572468
Content-Disposition: form-data; name="fieldNameHere"; filename="myfile.html"
Content-Type: text/html
<@INCLUDE *C:\myfiles\myfile.html*@>
---------------------------acebdf13572468--
所以我需要的是让 curl 产生类似的东西:特别是 name= 部分,然后是该部分底部的文件内容。我试过这个:
curl -F "fieldNameHere=myfile.html" http://myapi.com/
当我这样做时,它似乎完全忽略了我的文件。这是我添加 -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
根本没有文件内容(这是一个很大的 HTML 文件)。所以我认为我可能在这里缺少一些基本的东西。欢迎任何指点。
此外,我还检查了其他类似这样的 Whosebug 问题:What is the right way to POST multipart/form-data using curl?
但他们基本上是说要做一些像我在这里所做的事情。所以也许问题不是我的语法,而是它不想读取文件的其他原因。
curl -X POST -F fieldNameHere=@myfile.html http://myapi.com/
或
-X POST 由 -F 隐含(每个评论),引号是可选的
curl -F "fieldNameHere=@myfile.html" http://myapi.com/
对于更复杂的请求:
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"
您可以将多个块一起设置为一个请求。有关更多信息,请查看:https://docs.microsoft.com/en-us/azure/digital-twins/how-to-add-blobs!