技事纪-记录一次给予mongoose库的Https文件上传的实现

概述

工作需要,LINUX+QT下基于Mongoose库进行文件上传功能的开发,这是最近的一次经历,给我以激励的同时让我决定需要记录一下日常与收获;

困难:

一、我并不懂得网络开发

二、没有一点儿实现思路,之前大佬也没有实现过的功能

三、查找到的资料并不支持我成功实现

实现过程

发现问题

刚开始没有进入状态,只是查找资料然后参考命令进行编程实现,但实际测试确实失败,服务器根本不给一点儿反馈,找不到问题所在,十分沮丧;

然后通过curl进行测试,结果如下:

curl -v -L -X POST -F "file=@./archive.tar.gz" 网址

< HTTP/1.1 403 Forbidden
< Server: nginx/1.20.1
< Date: Wed, 10 Apr 2024 02:49:45 GMT
< Content-Type: text/html
< Content-Length: 153
< Connection: keep-alive
< 
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
* Connection #1 to host charge.thaisen.cn left intact

判断是服务器拒绝了请求,经查证,服务器端未实现此功能, 且只支持put命令;

确定实现命令

服务器更改完成后,通过curl上传成功,然后WireShark抓包,如下:

curl -X PUT -T "./archive.tar.gz" http:// 网址/ -v

> User-Agent: curl/7.47.0
> Accept: */*
> Content-Length: 769
> Expect: 100-continue
> 
< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 204 No Content
< Server: nginx/1.22.1
< Date: Wed, 10 Apr 2024 07:38:39 GMT
< Connection: keep-alive
< 
* Connection #0 to host               left intact

 ​​​​​​

代码实现 

经由上述测试,分析得到,命令不需要Content-Type,并确认了命令结构,最终代码实现如下:

    mg_printf(s_mg_connection,
              "PUT /%s HTTP/1.1\r\n"
              "Host: %.*s\r\n"
              "Accept: */*\r\n"
              "Content-Length: %d\r\n"
              "Expect: 100-continue\r\n"
              "\r\n",
              filename, (int)(s_host.len), s_host.ptr, len);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H_sHe_N

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值