【问题标题】:I cannot upload my file via POST with cURL我无法使用 cURL 通过 POST 上传我的文件
【发布时间】:2017-04-12 00:33:45
【问题描述】:

我正在尝试通过 API 将固件上传到计算机,这通常是通过单击我们网络服务器上的按钮来完成的。这是“常规”标题:

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

和我的请求负载:

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

------WebKitFormBoundarynaUDhUWIArqOTvuC--

我正在使用以下 cURL 命令来模拟这些请求,以将我的固件文件 POST 到计算机:

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: Invalid boundary in multipart form: ''

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

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"

上述命令没有产生错误,但我随后检查固件是否已更新,但还没有。

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

提前感谢您的帮助。

【问题讨论】:

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

标签: curl post asp.net-web-api google-api cherrypy


【解决方案1】:

我从 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:

https://daniel.haxx.se/blog/2015/09/11/unnecessary-use-of-curl-x/

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

https://ec.haxx.se/http-postvspost.html

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

我想先参考 curl 书的“HTTP multipart formposts”部分,如果您在阅读后有任何不清楚的地方,请询问指定,我会尝试在回复中详细说明或澄清书籍章节...

https://ec.haxx.se/http-multipart.html

--

/daniel.haxx.se

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

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

【讨论】:

    猜你喜欢
    • 2020-02-10
    • 1970-01-01
    • 2015-07-18
    • 2019-05-29
    • 2013-04-04
    • 2019-02-27
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多