我无法使用cURL通过POST上传文件

我无法使用cURL通过POST上传文件,curl,post,asp.net-web-api,google-api,cherrypy,Curl,Post,Asp.net Web Api,Google Api,Cherrypy,我试图通过API将固件上传到计算机上,这通常是通过单击web服务器上的按钮来实现的。这是“常规”标题: Request URL:http://192.168.243.179:8080/firmware/linux/ Request Method:POST Status Code:200 OK Remote Address:192.168.243.179:8080 Referrer Policy:no-referrer-when-downgrade 在固件页面上,我会单击一个按钮,它会将我的固件

我试图通过API将固件上传到计算机上,这通常是通过单击web服务器上的按钮来实现的。这是“常规”标题:

Request URL:http://192.168.243.179:8080/firmware/linux/
Request Method:POST
Status Code:200 OK
Remote Address:192.168.243.179:8080
Referrer Policy:no-referrer-when-downgrade
在固件页面上,我会单击一个按钮,它会将我的固件文件上传到/firmware/linux/

这是我提交固件文件时的响应头:

HTTP/1.1 200 OK
Date: Tue, 11 Apr 2017 23:22:43 GMT
Content-Length: 134
Content-Type: text/html;charset=utf-8
Server: CherryPy/3.2.2
这是我的请求头:

POST /firmware/linux HTTP/1.1
Host: 192.168.243.179:8080
Connection: keep-alive
Content-Length: 63067756
Cache-Control: max-age=0
Origin: http://192.168.243.179:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Content-Type: multipart/form-data; boundary=----
WebKitFormBoundarynaUDhUWIArqOTvuC
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://192.168.243.179:8080/firmware/
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
curl -i -X POST -d @"C:\Users\name\Documents\firmware/firmwarefile" http://192.168.243.179:8080/firmware/linux/ -H 
"Content-Type: multipart/form-data; boundary=----WebKitFormBoundarynaUDhUWIArqOTvuC"
我的请求是:

------WebKitFormBoundarynaUDhUWIArqOTvuC
Content-Disposition: form-data; name="image"; filename="uImage-jjr-dvr-
atlas_v1.0.1-16-g5e31aec"
Content-Type: application/octet-stream

------WebKitFormBoundarynaUDhUWIArqOTvuC--
我使用以下cURL命令模拟这些请求,将固件文件发送到计算机:

curl -i -X POST -d @"C:\Users\name\Documents\firmware/firmwarefile" http://192.168.243.179:8080/firmware/linux/ -H "Content-Type: multipart/form-data"
上述操作产生错误
ValueError:多部分形式的无效边界:“”

然后,我尝试使用请求标头中提供的边界:

POST /firmware/linux HTTP/1.1
Host: 192.168.243.179:8080
Connection: keep-alive
Content-Length: 63067756
Cache-Control: max-age=0
Origin: http://192.168.243.179:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Content-Type: multipart/form-data; boundary=----
WebKitFormBoundarynaUDhUWIArqOTvuC
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://192.168.243.179:8080/firmware/
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
curl -i -X POST -d @"C:\Users\name\Documents\firmware/firmwarefile" http://192.168.243.179:8080/firmware/linux/ -H 
"Content-Type: multipart/form-data; boundary=----WebKitFormBoundarynaUDhUWIArqOTvuC"
上面的命令不会产生任何错误,但我会检查固件是否已更新,并且没有更新

我是否正确地发布了我的文件?我不明白为什么固件文件没有被推送通过


提前感谢您的帮助。

我已经从cURL的官方论坛获得了帮助,并且我收到了一封电子邮件,其中解决了我的问题

I am using the following cURL command to imitate these requests to POST my
firmware file over to the computer:

    *curl -i -X POST -d @"C:\Users\name\Documents\firmware/firmwarefile"
首先,避免使用-X:

然后,当您需要多部分FormPost时,您需要-F而不是-d:

我是否正确地发布了我的文件?我不明白为什么固件文件没有被推送通过

我想先参考一下curl书中的“HTTP多部分formposts”一节,如果您在阅读之后有任何不清楚的地方,请询问并说明,我将尝试在回复中详细说明或澄清本书的章节

--

/丹尼尔.哈克斯.se

这是我的最后一个cURL命令,其中成功提交了文件

curl -i -F image=@"C:\Users\user\Documents\Firmware\firmwareFile" http://192.168.243.179:8080/firmware/file

说话很便宜,给我看看代码!(c) 莱纳斯·托瓦尔兹