OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍

这篇具有很好参考价值的文章主要介绍了OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HTTP是一个简单的请求-响应协议在物联网设备中使用非常广泛可向HTTP服务器获取数据、推送数据、下载服务器上的文件、OTA远程升级等ML307A OpenCPU SDK提供的HTTP API接口最大支持创建4路HTTP实例,且支持GET、POST和PUT等常用请求方法。 本文从使用流程demo代码OneNET平台对接示例及常见问题四个方面对ML307A模组OpenCPU的HTTPHTTPS功能进行了介绍

一、HTTP使用流程解析

以下流程图为使用ML307A OpenCPU SDK HTTP功能时的常见流程及相关函数接口介绍。

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

图1 HTTP接口函数使用流程

1介绍了使用HTTP同步接口cm_httpclient_sync_request()与HTTP服务器交互的常规流程,可结合ML307A_OpenCPU_Standard_x.x.x_release\examples\http\

src\ cm_demo_http.c中的demo示例程序加深理解。

HTTP功能包含的全部函数接口详细定义可在include\cmiot\cm_http.h中查看

二、HTTP demo代码解析

SDK中有一个HTTP常规使用方法的demo程序,可在cm_demo_http.c文件中查看,下面我们详细看一下。

2.1 创建HTTP客户端实例

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

2 创建HTTP客户端实例函数

(1) 第一步使用cm_httpclient_create()在模组本地端创建一个HTTP实例,此函数有三个参数,第一个参数为HTTP服务器地址url,可使用完整域名或iP:端口的形式,注意url地址前必须加上HTTP或者HTTPS,demo中访问的服务器为百度;

(2) 第二个参数为客户端相关回调函数,demo中使用cm_httpclient_sync_

request()同步接口可忽略该参数,传NULL即可;

(3) 第三个参数为实例句柄,若HTTP实例创建成功,则会返回一串随机的数字,作为这个实例的标识号,若创建失败则返回NULL。

2.2 HTTP客户端实例参数设置

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

3 HTTP客户端实例参数设置

  1. 第二步使用cm_httpclient_cfg_t结构体和cm_httpclient_set_cfg()函数对第一步创建的HTTP客户端实例进行参数设置;

(2) demo中设置的主要参数有:

①是否使用SSL,本例访问百度,需要使用HTTPS,故此参数为true;

②SSL的索引号,当访问HTTPS服务器时设置;

③设置HTTP连接超时时间及请求响应超时时间,demo中均使用默认时间;具体如下图所示:

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

4 HTTP超时时间默认值

④设置DNS解析优先级,demo中设置为1代表ipv6解析优先。

2.3 HTTP客户端实例SSL设置及CA证书

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

5 SSL设置及CA证书

  1. 第三步使用cm_ssl_setopt()函数设置SSL验证方式及设置CA证书,此函数有3个参数如下:

①第一个参数ssl_id是ssl通道号,范围为0-5,demo中ssl_id为2(第二步中client_cfg.ssl_id设置为2 );

②第二个参数cm_ssl_param_type_e是SSL配置项类型,根据cm_ssl_param_type_e中不同的枚举类型配置SSL的各个参数,demo中主要配置CM_SSL_PARAM_VERIFY和CM_SSL_PARAM_CA_CERT这两项,demo中设置SSL验证方式为1,单向验证。

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

6 SSL配置类型结构体

  1. 注意若要访问的HTTP服务器不带ssl,即不是以HTTPS开头,则不需要进行此步配置。

2.4 使用同步接口发送HTTP请求

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

7 同步接口方式HTTP请求函数

  1. 使用cm_httpclient_sync_param_t设置HTTP同步接口输入参数,此结构体中含请求类型GETPOSTPUT等,请求路径,及发送给服务器的请求数据(POST时发送给服务器的content),demo中请求类型为GET,当为GET方法时,必须设置请求路径(本例中路径为根目录“/”),且第三个参数“数据长度”为0,第四个参数“数据”为NULL;

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

8 HTTP同步接口输入参数

  1. 使用cm_httpclient_sync_response_t结构体接收HTTP 同步接口响应数据;此结构体用于接收HTTP服务器发给模组的响应结果数据,包含响应结果码、响应报头,响应消息体等数据;

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

9 HTTP同步接口响应参数结构体

(3) 使用cm_httpclient_sync_request()函数向HTTP服务器发送请求,此函数为同步接口。函数接口包括客户端实例句柄client,以及上面配置好的请求输入参数param和响应结果response。

2.5 HTTP响应结果

2.4中发送的HTTP请求参数无错误,则模组会收到HTTP服务器响应结果,可将收到的response结构体中包含的服务器返回数据进行处理或打印输出

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

10 HTTP响应结果打印输出

(1) demo中打印了response的三个参数,分别为请求成功时的响应结果码、响应报头长度响应消息体长度;

(2) 还可以将response剩余两个参数打印出来,即打印HTTP服务器返回的response_header和response_content,即为响应报头和响应消息体。

2.6 释放HTTP响应数据

当程序已将HTTP服务器返回的完整数据处理完后,需要释放这些数据,使用下图中的cm_httpclient_sync_free_data()函数进行释放。

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

11 释放HTTP响应数据

2.7 终止HTTP连接或删除客户端实例

当本次HTTP请求结束时需要终止HTTP连接以及删除客户端实例,以释放模组本地资源或者供其他线程使用。

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

12 终止HTTP连接及删除实例

删除HTTP本地实例注意事项:

(1)cm_httpclient_delete()接口会将close socket(HTTP)操作发送至eloop模块中让其执行close socket操作;

(2)本接口返回成功代表操作已发送至eloop中,不代表已完成实例删除操作;

(3)用户连续两次调用本接口时建议中间保证100ms以上的延时。

以上,就是HTTP demo示例程序的解析。

三、使用HTTP与OneNET平台对接示例

下面我们使用ML307A OpenCPU SDK提供的 HTTP函数接口与OneNET平台进行对接,整体程序流程与上述HTTP demo代码几乎一致,这里我们解析其中存在差异的部分,以下为完整步骤及程序流程解析。

3.1 平台侧创建HTTP产品及设备

首先,登录OneNET平台https://open.iot.10086.cn/,进入首页右上角“开发者中心”,点击左上角“全部产品服务”-“基础服务”-“多协议接入”,进入多协议接入页面后点击上面菜单的“HTTP”,然后开始创建产品,添加设备,完成以上步骤后即可继续在SDK中设置登录OneNET需要的相关HTTP客户端实例参数。

3.2 修改服务器地址为OneNET HTTP服务器地址

“OneNET平台-多协议接入-HTTP协议”的地址为http://api.heclouds.com,因此有如下修改

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

13 OneNET平台HTTP服务器地址

3.3 HTTP客户端实例参数设置

 因为“OneNET平台-多协议接入-HTTP协议”为HTTP普通连接,所以将ssl_enable参数设置为false,同时跳过HTTP客户端实例SSL设置。

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

14 OneNET平台无需设置SSL

3.4 HTTP请求通用报头

不同于第二章的GET请求,我们需要POST发送数据给OneNET平台,所以需要设置OneNET规定的通用报头,即我们在OneNET平台上创建的产品masterapi-key,用作登录OneNET时的鉴权,因此需要增加一个设置通用报头的函数,如下图所示

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

15 设置通用报头函数接口

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

16 登录OneNET平台所需的通用报头参数

3.5 使用同步接口发送HTTP POST请求

不同于第二章的GET请求,当需要向OneNET POST上发数据时cm_httpclient_

sync_param_t同步接口输入参数需要做三处修改:

  1. 设置HTTP请求类型为HTTPCLIENT_REQUEST_POST;
  2. 设置POST请求路径为/devices/1044214984/datapoints?type=3,其中1044214984为OneNET平台上的设备ID;
  3. 向OneNET平台POST数据长度为24, 数据string_http="{\"temp123\":

\"8834rteedd\"}",此处数据长度和数据内容可根据需要修改。

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

17 OneNET平台POST的内容

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

18 OneNET平台HTTP POST参数设置

3.5 HTTP响应结果打印

此处将OneNET平台返回的HTTP响应结果包括响应结果码,响应报头长度、响应消息体长度,响应报头内容,响应消息体内容全部打印出来,打印程序及结果如下:

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

19 OneNET平台HTTP响应结果打印

OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍,http,网络,物联网,嵌入式硬件,经验分享

20 OneNET平台HTTP响应结果示例

以上就是,使用HTTP与OneNET平台对接的完整程序流程解析

四、常见问题

1、cm_httpclient_sync_request()同步函数接口适用于哪些应用场景,使用时有什么注意事项?

发送http请求同步接口,只可用于非chunk模式发送,需先创建实例并完成相关参数设置,响应结果中的数据未内部动态分配空间,使用完后可通过cm_httpclient_

sync_free_data接口释放,下次请求时也会自动释放。

2、使用HTTP客户端参数设置时有什么注意事项?

  客户端参数设置,创建实例后设置,请求过程中不可设置;服务器应答重定向信息的情况下,采用cm_httpclient_set_cfg()配置的参数连接重定向的服务器。

3、使用HTTP实例的通用报头函数时有什么注意事项?

设置通用报头,实例期间有效,未设置时,发送请求时将自动添加默认报头。直接引用header指针,不做拷贝,需保证请求过程中不做修改和释放,如外部释放,也需调用cm_httpclient_custom_header_free接口释放内部设置。

4、什么情况下需要使用HTTP实例的特定报头函数,与通用报头函数有何区别?

设置特定报头,用于设置报头中,在不同请求时存在变化的字段,如果通用报头中同样存在该字段,将在发送请求时自动替换为当前设置值。直接引用header指针,不做拷贝,需保证请求过程中不做修改和释放,如外部释放,也需调用cm_httpclient_

specific_header_free接口释放内部设置。文章来源地址https://www.toymoban.com/news/detail-707535.html

到了这里,关于OneMO模组说|技术学堂-ML307A开发指南(二) OpenCPU HTTP及HTTPS使用介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【SQL Server】数据库开发指南(八)高级数据处理技术 MS-SQL 事务、异常和游标的深入研究

    本系列博文还在更新中,收录在专栏:#MS-SQL Server 专栏中。 本系列文章列表如下: 【SQL Server】 Linux 运维下对 SQL Server 进行安装、升级、回滚、卸载操作 【SQL Server】数据库开发指南(一)数据库设计的核心概念和基本步骤 【SQL Server】数据库开发指南(二)MSSQL数据库开发对

    2024年02月07日
    浏览(86)
  • 【深入浅出Selenium库的百变玩法】: 掌握Web自动化测试的关键技术和策略,包括元素定位、页面操作、动态内容处理等,适用于初学者和高级开发者的综合指南

    Selenium是一个功能强大的库,支持多种高级操作,如处理多窗口、多标签页、键盘与鼠标事件、滚动操作等。掌握Selenium可以大大提高Web应用的测试效率和覆盖范围。希望这篇文章能帮助你开启Selenium进行自动化测试的新篇章。 Selenium也是一个广泛使用的自动化测试工具,它支

    2024年02月20日
    浏览(58)
  • HarmonyOS鸿蒙开发指南:基于ArkTS开发 音频渲染开发指导

    目录 场景介绍 音频中断 状态检查 异步操作 开发步骤

    2024年01月16日
    浏览(58)
  • HarmonyOS鸿蒙开发指南:基于ArkTS开发 音频录制开发指导

    目录 场景介绍 开发步骤 全流程场景 正常录制场景 音频录制的主要工作是捕获音频信号

    2024年01月19日
    浏览(69)
  • GPT应用开发:GPT插件开发指南

    欢迎阅读本系列文章!我将带你一起探索如何利用OpenAI API开发GPT应用。无论你是编程新手还是资深开发者,都能在这里获得灵感和收获。 本文,我们将继续展示聊天API中插件的使用方法,让你能够轻松驾驭这个强大的工具。 首先给大家展示下插件的运行效果,如下图所示:

    2024年01月19日
    浏览(92)
  • 一招解决开发环境问题——远程容器开发指南

    使用C++作为主要开发语言的程序猿们应该会认同搭建开发环境是一件烦人的事情。为了编译一个程序不仅需要下载各种依赖包,还可能面临本地系统不兼容、编译器版本不一致、包版本冲突等各种问题。笔者在运营iLogtail开源社区的过程中发现开发和调试环境问题也是成员问

    2024年01月16日
    浏览(52)
  • 智能合约平台开发指南

    随着区块链技术的普及,智能合约平台已经成为了这个领域的一个重要趋势。智能合约可以自动化执行合同条款,大大减少了执行和监督合同条款所需的成本和时间。那么,如何开发一个智能合约平台呢?以下是一些关键步骤。 一、选择合适的区块链平台 智能合约通常运行

    2024年04月14日
    浏览(34)
  • ZEPHYR 快速开发指南

    国内小伙伴在学习zephyr的时候,有以下几个痛点: 学习门槛过高 github访问不畅,下载起来比较费劲。 这篇文章将我自己踩的坑介绍一下,顺便给大家优化一些地方,避免掉所有的坑。 首先用 virtualbox 来安装一个ubuntu22.04 本文适应的是ubuntu的操作系统 github.com 有时候无法访问

    2024年02月15日
    浏览(47)
  • LuatOS 开发指南

    下载软件 下载官方NDK例程压缩包到本地,并解压。可以看到目录如下: doc: 文档教程 env: 编译环境 example: NDK示例 platform: 需要编译的平台(air72x/air8xx) tools: 其他辅助软件 VSCode 使用VSCode打开NDK文件夹,并可以在VSCode中进行代码的编写和编译。 编译 打开终端,并进入到 exa

    2024年02月10日
    浏览(52)
  • kubernetes开发指南

    云原生的迅速崛起让越来越多开发者进入容器领域,作为云原生的核心项目kubernetes更是从业者最需要掌握的一门技术,市场上关于使用和入门类书籍非常之多,但是开发类书籍基本还是一个空缺,同样社区的官方文档也少之又少。本书希望为开发提供一定的指导作用,在开发

    2023年04月23日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包