前言
POST请求是HTPP协议中一种常用的请求方法,它的使用场景是向客户端向服务器提交数据,比如登录、注册、添加等场景。另一种常用的请求方法是GET,它的使用场景是向服务器获取数据。
一、hfs设置
服务器需要如下设置才能进行post功能:
上面截图是从官方文档中获取的,需要注意几点:
1、需要添加一个真实的(不是虚拟的)文件夹,当添加到HFS中后,文件夹是“红色”的,如下图所示:
2:对文件夹属性进行设定,赋予upload权限
注意以上两点,hfs端的设置就基本可以了,可以接受客户端的post请求了
二、使用模块连接服务器流程
//初始化HTTP服务
AT+HTTPINIT
OK
//设置路径
AT+HTTPPARA="URL","http://110.42.233.58:9999/http/"
OK
//设置Content-Type
AT+HTTPPARA="USERDATA","Content-Type:multipart/form-data; boundary=--------------------------913866950166983945997246\\r\\nAPPKEY:FW"
OK
//设置数据长度413 超时时间设置为3秒
AT+HTTPDATA=413,3000 长度411 时间3秒
DOWNLOAD //DOWNLOAD上报之后发送数据
发送
----------------------------913866950166983945997246
Content-Disposition: form-data; name=""; filename="cx4.txt"
Content-Type: text/plain
22222222222222222222222222
----------------------------913866950166983945997246
Content-Disposition: form-data; name=""; filename="cx3.bin"
Content-Type: application/octet-stream
11111111111111111111111111111
----------------------------913866950166983945997246--
数据最后需要添加回车以示结束
返回
OK
//进行post
AT+HTTPACTION=1
OK
三、post相关数据解析
服务端通常是根据请求头中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。POST 几种请求主要包括 application/x-www-form-urlencoded、 multipart/form-data、 application/json、text/xml 四种主要方法的方法。
模块上传文件使用的是multipart/form-data,这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 表单的 enctype 等于 multipart/form-data。
AT+HTTPPARA="USERDATA","Content-Type:multipart/form-data; boundary=--------------------------913866950166983945997246\\r\\nAPPKEY:FW"
首先生成了一个 boundary 用于分割不同的字段,为了避免与正文内容重复,boundary 很长很复杂。然后 Content-Type 里指明了数据是以 mutipart/form-data 来编码,本次请求的 boundary 是什么内容。
AT+HTTPDATA=413,3000 长度411 时间3秒
DOWNLOAD //DOWNLOAD上报之后发送数据
发送
----------------------------913866950166983945997246
Content-Disposition: form-data; name=""; filename="cx4.txt"
Content-Type: text/plain
22222222222222222222222222
----------------------------913866950166983945997246
Content-Disposition: form-data; name=""; filename="cx3.bin"
Content-Type: application/octet-stream
11111111111111111111111111111
----------------------------913866950166983945997246--
数据最后需要添加回车以示结束
消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 –boundary 开始,紧接着内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以 –boundary– 标示结束。
Content-type:text/plain最常见的应用场景之一是发送包含代码、脚本、配置文件等一些不需要格式化和样式的文本内容。