MN316 OpenCPU丨HTTP使用介绍

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业务流程图

1.1创建客户端实例

连接HTTP首先需要创建一个客户端实例。

图2 创建客户端实例

①url:即服务器的地址;

②callback:即客户端相关的回调函数,可以为空;

③handle:实例句柄。

1.2客户端配置

同时对于此客户端实例进行相应的参数配置。

图3 客户端参数设置

①handle:实例句柄(客户端);

②cfg:客户端配置参数(具体参数如下)。

图4 客户端可配参数

1.3 发送请求

接下来选择HTTP请求类型。

图5 发送请求

①handle:实例句柄(客户端);

②param:发送请求的参数(具体如下)。

图6 同步接口输入参数

请求类型又分为:GET请求,请求指定的页面信息;POST请求,向指定资源提交数据;PUT请求,向服务器指定的位置上传最新的内容;DELETE请求,请求服务器删除Request-URL资源;HEAD请求,用于获取报头信息。

图7 HTTP请求类型

图8 同步接口输入参数

③response:HTTP请求所返回的结果及存放在此,其具体结构如下。

图9 同步接口响应数据

1.4 释放相应数据

得到结果后,释放数据。

图10 释放响应数据接口

1.5 HTTPS请求

如果对安全性要求较高,则使用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设置服务器路径

2.1 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)上。

、注意事项

  1. 在调用函数接口前,需确认模组是否成功驻网,并确认已经配置好服务器与相对路径,否则可能导致调用函数接口无法收到正确的返回。
  2. demo中优先使用IPV6 DNS来解析,而有些SIM卡对于IPV6 DNS服务器请求会产生异常失败,这时将HTTP参数中dns_priority 设置为1,即将dns解析设置为IPV4优先,再重新测试一下。

图30 HTTP 可配参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/232722.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二维码智慧门牌管理系统升级:社区关怀

文章目录 前言一、系统的工作原理二、系统功能与关怀服务三、社区关怀的意义 前言 随着科技的发展,生活日益智能化,门牌系统也随之发展。近日,一种新型的二维码智慧门牌管理系统正在崛起,以创新的方式将社区关怀融入到每一个家庭…

STM32F407-14.3.9-02输出比较模式

输出比较模式 输出比较模式生成波形时 当采用上升沿或下降沿计数时,更改ARR的值可改变周期; 更改CCRx的值会影响到生成波形的相位。波形的占空比永远50% 当采用中心对齐模式时, 更改ARR的值可以改变周期,更改CCRx的值可以改…

动态规划(dp)初步学习案例讲解

问题(来源:leetcode300): 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如&a…

HarmonyOS--ArkTS(1)--基本语法(1)

目录 基本语法概述 声明式UI描述 自定义组件 创建自定义组件 自定义组件的结构--struct ,Component,build()函数 生命周期 基本语法概述 装饰器: 用于装饰类、结构、方法以及变量,并赋予其特殊的含义。如上述示例中Entry、C…

TypeScript基本语法

想在自己电脑上快速演示下方代码?点击ts官方演练场:https://www.typescriptlang.org/play 变量声明:TypeScript 在 Javascript的基础上加入了静态类型检查功能,因此每一个变量都有固定的数据类型。 //string: 字符串,…

GPT-4 变懒了?官方回复

你是否注意到,最近使用 ChatGPT 的时候,当你向它提出一些问题,却得到的回应似乎变得简短而敷衍了?对于这一现象,ChatGPT 官方给出了回应。 译文:我们听到了你们所有关于 GPT4 变得更懒的反馈!我…

智能优化算法应用:基于蜉蝣算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于蜉蝣算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于蜉蝣算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蜉蝣算法4.实验参数设定5.算法结果6.参考文献7.MA…

区块链实验室(30) - 区块链期刊:Distributed Ledger Technologies: Research and Practice

区块链涉及多学科及技术,众多期刊接收区块链文章。Distributed Ledger Technologies: Research and Practice是ACM出版集团的一本期刊。 Distributed Ledger Technologies: Research and Practice创刊历史很短,始于2022年,出版期数也不多。 载…

FastAPI之Hello World

世界上最著名的程序 from fastapi import FastAPIapp FastAPI()app.get("/") async def root():return {"message": "Hello World"}app.get("/hello/{name}") async def say_hello(name: str):return {"message": f"…

node笔记

文章目录 一、Node.js基础1. 认识Node.js01 nodejs的特性02 使用 Node.js 需要了解多少 JavaScript03 浏览器环境vs node环境 2. 开发环境搭建3. 模块、包、commonJS02 CommonJS规范03 modules模块化规范写法 4. Npm&Yarn01 npm的使用02 全局安装 nrm03 yarn使用 5. 内置模…

数据结构之归并排序及排序总结

目录 归并排序 归并排序的时间复杂度 排序的稳定性 排序总结 归并排序 归并排序大家只需要掌握其递归方法即可,非递归方法由于在某些特殊场景下边界难控制,我们一般很少使用非递归实现归并排序。那么归并排序的递归方法我们究竟是怎样实现呢&#xff…

报错:Parsed mapper file: ‘file mapper.xml 导致无法启动

报错 : Logging initialized using class org.apache.ibatis.logging.stdout.StdOutImpl adapter. Registered plugin: com.github.yulichang.interceptor.MPJInterceptor3b2c8bda Parsed mapper file: file [/Mapper.xml] application无法启动 我这边产生原因是项…

JVM Optimization Learning(六)

目录 一、JVM Optimization 1、Shenandoah Shenandoah的使用方法 2、ZGC ZGC的版本更迭 ZGC的使用方法 ZGC的参数设置 3、JMH测试GC性能 一、JVM Optimization 1、Shenandoah Shenandoah是由Red Hat开发的一款低延迟的垃圾收集器,Shenandoah并发执行大部分…

Qt Creator设置IDE的字体、颜色、主题样式

Qt是一款开源的、跨平台的C开发框架,支持Windows、Linux、Mac系统,从1995发布第一版以来,发展迅猛,最开始是用于Nokia手机的Symbian(塞班)系统和应用程序开发,现在是用于嵌入式软件、桌面软件(比如WPS、VirtualBox)、A…

Tomcat部署开源站点JPress

前言 JPress使用Java开发,是我们常见的开源博客系统。JPress是一个开源的WordPress插件,它提供了一个简单而强大的方式来创建企业级站点。该插件包括许多特性,例如主题定制、页面构建器、性能优化、SEO、安全、电子商务和社交媒体整合等。使用…

Python实战演练之python实现神经网络模型算法

python实现神经网络模型算法 今天,厾罗和大家分享用Python实现神经网络模型算法,仅用于技术学习交流。 实现技巧 1.导入依赖库 主要是安装相关的依赖库。本文实现的环境为:python 3.7。 from __future__ import division import math …

【数值计算方法(黄明游)】迭代法的一般形式与收敛性定理

一、向量、矩阵范数与谱半径 【数值计算方法(黄明游)】解线性代数方程组的迭代法(一):向量、矩阵范数与谱半径【理论到程序】 1. 向量范数 l 1 l_1 l1​ 范数(曼哈顿范数): ∣ ∣…

MybatisPlus集成baomidou-dynamic,多数据源配置使用、MybatisPlus分页分组等操作示例

文章目录 MybatisPlus特性MybatisPlus支持数据库MybatisPlus 架构多数据源应用场景pom配置示例代码 MybatisPlus特性 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 CURD&#…

MySQL深入——8

Order by语句是如何工作的? 首先我们来创建一个表 CREATE TABLE t (id int(11) NOT NULL,city varchar(16) NOT NULL,name varchar(16) NOT NULL,age int(11) NOT NULL,addr varchar(128) DEFAULT NULL,PRIMARY KEY (id),KEY city (city) ) ENGINEInnoDB; 全字段…

JVS低代码表单引擎:数据校验与处理的先锋

随着信息技术的迅速发展,数据校验与处理已经成为了各类应用中不可或缺的一环。尤其是在涉及敏感信息,如密码处理时,其安全性和准确性显得尤为重要。JVS低代码表单引擎提供了强大的文本组件触发逻辑校验功能,它能够在用户填写数据的…