使用c通过http发送文件
最近要用单片机通过http
发送文件到服务器,所以写了个发送文件的demo
。
讲解
http
协议本质上还是socket
协议,我的测试demo
是基于Linux
的,所以我直接使用Linux
的socket
连接。
当我连接到服务器之后,我就需要直接发送http
格式的头,这里要设置post
的位置,内容长度,以及主机域名等等:
POST xxxxxxxxxx HTTP/1.1
Content-Length: xxxxxxx
Host: xxxxxxx
Content-Type: multipart/form-data;boundary=------FormBoundaryShouldDifferAtRuntimehttp
的body
:
------FormBoundaryShouldDifferAtRuntime
Content-Disposition: form-data; name="deviceId"
1
------FormBoundaryShouldDifferAtRuntime
Content-Disposition: form-data; name="file"; filename="debug.log"
Content-Type: application/octet-stream
[message-part-body; type: application/octet-stream, size: 2076 bytes]
------FormBoundaryShouldDifferAtRuntime--
要注意的就是这里所有的换行都是\r\n
的,因为我是linux
的系统,所以之前我一直计算字符串长度与Content-Length
不匹配。
代码
|
这两个简单的函数是设置http
的头与内容的。但是我这里写的只是一个简单txt
的文件上传。如果要上传二进制文件的话,必须要把body
部分分开来发送。
在linux
下可以使用sendfile
函数,但是在单片机中需要写别的函数。