HTTP(Hyper Text Transfer Protocol)即超文本传输协议,是一个简单的请求-响应协议,通常运行在TCP之上,它指定了客户端可能发送给服务器消息类型以及得到什么类型响应。HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer)即超文本传输安全协议,在HTTP的基础下加入SSL,是以安全为目标的HTTP通道。这两种协议目前广泛运用于物联网设备中,是物联网工程师必备的技能。本文从函数接口、OpenCPU demo解析、注意事项三个方面对MN316 OpenCPU的HTTP demo及HTTPS demo进行解析。
一 、函数接口介绍
HTTP应用实例流程图如下。
图1 HTTP业务流程图
连接HTTP首先需要创建一个客户端实例。
图2 创建客户端实例
①url:即服务器的地址;
②callback:即客户端相关的回调函数,可以为空;
③handle:实例句柄。
同时对于此客户端实例进行相应的参数配置。
图3 客户端参数设置
①handle:实例句柄(客户端);
②cfg:客户端配置参数(具体参数如下)。
图4 客户端可配参数
接下来选择HTTP请求类型。
图5 发送请求
①handle:实例句柄(客户端);
②param:发送请求的参数(具体如下)。
图6 同步接口输入参数
请求类型又分为:GET请求,请求指定的页面信息;POST请求,向指定资源提交数据;PUT请求,向服务器指定的位置上传最新的内容;DELETE请求,请求服务器删除Request-URL资源;HEAD请求,用于获取报头信息。
图7 HTTP请求类型
图8 同步接口输入参数
③response:HTTP请求所返回的结果及存放在此,其具体结构如下。
图9 同步接口响应数据
得到结果后,释放数据。
图10 释放响应数据接口
如果对安全性要求较高,则使用HTTPs来建立连接发送请求。具体实现方法参照上述HTTP应用实例流程,需注意,第②步配置参数时要将ssl_enable值设为1使能,在第③步前需添加一个设置ssl证书的步骤。
图11 配置SSL参数
①ssl_id:同cm_HTTPclient_cfg_t中的ssl_id索引;
②type:ssl配置类型,具体有如下所示。
图12 SSL配置类型
③value:ssl配置参数(即证书)格式如下。
图13 根证书
1.6 其他函数介绍
①删除客户端实例;
图14 删除客户端实例
②终止HTTP连接;
图15 终止HTTP连接
图16 获取响应结果
二、OpenCPU demo解析
标准版SDK的demo中提供了6个与HTTP相关的测试项。
图17 HTTP调用示例
在开始之前,需要先将服务器与相应路径设置好,本文示例为:
图18 HTTP设置服务器路径
GET/PUT/POST/DELTE整个流程相似,这里用GET做解析。
图19 HTTP GET Demo代码
根据上文介绍,一次请求主要分为4步,本实例完整地体现出这四步。
①创建一个客户端实例;
图20 创建客户端实例
②对这个客户端实例进行参数配置;
图21 配置客户端参数
③发送具体请求,得到返回结果;
④释放相应数据。
图22 释放相应数据
测试结果如下图。
图23 测试结果图
成功对HTTP服务器发送了get请求。
2.2 HTTPS 无证书加密测试
调用HTTPS的请求示例API接口:CM:HTTP:HTTPSGETTEST
图24 HTTPS配置参数
HTTPS GET与前面HTTP GET的主要区别是在客户端配置阶段ssl使能。
图25 HTTPS客户端配置参数
以及配置了ssl,但是此处是为了无证书加密测试,无身份验证,所以ssl实际上是空的。
图26 配置无证书方式加密
执行结果如下图:
图27 HTTPS 无证书方式测试结果
2.3 HTTPS CA证书加密测试
这里就将上一节中ssl配置改为CA证书验证,并添加CA证书。
图28 添加CA证书
执行结果如下图:
图29 添加CA证书执行结果
可以看到,收到响应内容与没有身份验证时的数据并不相同,差异主要体现在报头(header)的长度以及请求的内容(content)上。
三 、注意事项
- 在调用函数接口前,需确认模组是否成功驻网,并确认已经配置好服务器与相对路径,否则可能导致调用函数接口无法收到正确的返回。
- demo中优先使用IPV6 DNS来解析,而有些SIM卡对于IPV6 DNS服务器请求会产生异常失败,这时将HTTP参数中dns_priority 设置为1,即将dns解析设置为IPV4优先,再重新测试一下。
图30 HTTP 可配参数