根据RK3576开发板的http/https通讯

最新热点 2025-05-30 17:27:04 4

1. HTTP/HTTPS简介。

HTTP(全称:Hyper。 Te。xt Transfer Protocol,超文本传输协议)是互联网上运用最为广泛的一种网络协议,是一个客户端和服务器恳求和应对规范,用于从WWW服务器传输超文本到本地的传输协议。

而HTTPS(全称:Hyper Text Transfer Protocol over SecureSocket Layer)是以安全为方针的HTTP通道,在原有HTTP的基础上经过传输加密和身份。认证。(即增加SSL/TSL安全拜访协议)确保了传输进程的安全性。

1.1 HTTP和HTTPS的差异。

HTTP和HTTPS的差异如下所示。

协议。HTTP。HTTPS。
CA证书。不需求。需求。
传输加密办法。明文传输,无加密。SSL/TSL加密传输。
衔接办法。端口。号运用80。端口号运用443。
衔接状况。无状况的。由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。

1.2 恳求和呼应。

典型的HTTP/HTTPS通讯便是运用在阅览器与网页服务器之间,阅览器即为客户端,担任宣布恳求,接纳报文,烘托显现作用。网页服务器即为服务器,担任应对恳求,办理服务器文件、处理详细事务。而在某些状况中,HTTP能够作为信息交流的通讯规矩。

客户端需求资源时发送出来的即为恳求报文,服务器接纳到恳求后向客户端回来的便是呼应报文,HTTP规则了恳求报文和呼应报文的格局。

恳求报文格局如下所示。

关于本文而言,咱们首要重视恳求办法和URL即可。

恳求行。
报文元素。描绘。
恳求办法。常见的办法有:
GET:用于检索和获取服务器的资源,恳求内容会在URL上显现;
POST:用于创立或更新服务器的内容,恳求内容不会在URL上显现,而是在显现在主体内。
URL。服务器的虚拟文件途径,将在下面章节关键介绍。

呼应报文示例如下所示,首要组成部分有:

状况行(包括协议版别、状况值、状况短语);

呼应音讯头(以键值对的办法存在,例如时间、数据类型、数据长度等);

空行(用于区别报文头和呼应正文);

呼应正文(关于网页而言,常见的是html代码,也能够是音视频文件、图片,通常是音讯报头的Content-Type指定)。

1.3 URL。

假定咱们建立了一个环境检测服务器体系,用于收集、记载全市各个观测点的环境数据,假定服务器的寄存结构如下所示,此服务器在公网上的域名为www.huanjin.com,里边有两个设备,每个设备寄存了不同日子的气温数据,当客户端需求调取详细设备详细数据时,则需求提交一个仅有的途径给服务器查找,这个仅有途径便是URL。

URL(Uniform Resource Locator,共同资源定位符),寄存在恳求报文的恳求行内,充任路标作用。当咱们阅览网页时,点击进入不同的组件,阅览器就会主动的帮咱们填充不同的URL,地址的构成如下所示。完好的URL包括:协议部分、网址部分、文件地址。

详细内容如下所示。

组成部分。描绘。
协议。以“//”切割,常见的有http和https;
网址。是公网上绝无仅有的域名,即人们常见的www.b。ai。du.com等。
文件地址。从域名后的第一个“/”到最终一个“/”前的内容,被称为虚拟目录。
从最终一个“/”后到“#”前,即为文件名。

例如咱们想获取环境检测服务器中设备1的12月25号数据,填写的恳求报文便是,GET恳求,URL为“http://www.huanjin.com/Device-1/日期数据/20211225”。

URL还能够带着变量信息,名称为URL查询字符串,办法为:

https://www.。Ad。block.com/s?a=123&b=234。

变量寄存在URL结尾处,以“?”最初,以“参数名=值”的键值对办法寄存,多个参数用“&”切割。

1.4 HTTPS运用关键。

经过以上叙说可知,运用HTTPS需求时间环绕以下几点:

CA证书,HTTPS协议用SSL/TSL;

发送数据运用POST恳求,服务器地址运用URL格局表明;

接纳数据、文件运用GET恳求,服务器地址运用URL格局表明;

我司的easyeai-a。pi。软件开源库将杂乱的报文格局、收发操作做了共同的封装,为客户供给简略快捷的调用办法完成HTTP/HTTPS通讯功用。

2. 快速上手。

假如您。初度阅览此文档。,请阅览:《入门攻略/源码办理及。编程。介绍/源码工程办理》,按需办理自己工程源码(注:此文档必看,并主张选用。【长途挂载办理】。办法,不然有代码丢掉危险!!!)。

2.1 源码工程下载。

先在PC虚拟机定位到nfs服务目录,再在目录中创立寄存源码库房的办理目录:

cd ~/nfsrootmkdir GitHubcd GitHub。

再经过git东西,在办理目录内克隆长途库房(需求设备能对外网进行拜访)。

git clone https://github.com/EASY-EAI/EASY-EAI-Toolkit-3576.git。

注:

* 此处可能会因网络原因形成卡顿,请耐性等候。

* 假如真实要在gitHub网页上下载,也要把整个库房下载下来,不能独自下载本实例对应的目录。

2.2 开发环境建立。

经过adb shell进入板卡开发环境,如下图所示。

经过以下指令,把nfs目录挂载上nfs服务器。

mount -t nfs -o nolock。 < nfs server ip >:。< nfs path in server >/home/orin-nano/Desktop/nfs/。

2.3 例程编译。

然后定位到nfs的挂载目录,再在目录中创立寄存源码库房的办理目录:

cd /home/orin-nano/Desktop/nfs/GitHub。

进入到对应的例程目录履行编译操作,详细指令如下所示:

cd EASY-EAI-Toolkit-3576/Demos/common-http/./build.sh。

2.4 例程运转及作用。

进入Release目录,履行下方指令,运转示例程序:

./Release/test-http_server & ./Release/test-http_client。

履行作用如下所示。

API的详细阐明,以及API的调用(本例程源码),详细信息见下方阐明。

3. HTTPS库函数阐明。

本章节介绍EASY EAI的HTTPS库函数的运用办法。

3.1 引证办法。

EASY EAI api库坐落本库房的easyeai-api目录中。为便利客户在本地工程中直接调用咱们的EASY EAI api库,此处列出工程中需求链接的库以及头文件等,便利用户直接增加。

描绘。CMake写法。Makefile写法。
api.cmake。${common_root}/http/api.cmake。无。
头文件目录。${HTTP_INCLUDE_DI。RS。}。-I ../../easyeai-api/common/http。
源文件目录。${HTTP_SOURCE_DIRS}。../../easyeai-api/common/http。
库文件目录。无。无。
库链接参数。${HTTP_LIBS}。无。

API源代码途径为EASY-EAI-Toolkit-3576/easyeai-api/common/http/。用户可经过源代码了解接口完成,乃至可对源码进行修正。

3.2 设置证书。

设置证书的函数原型为:

void set_customer_crt(const char *crt_file);

详细介绍如下所示。

函数名:set_customer_crt()。
头文件。easyeai-api/common/http/https_request.h。
输入参数。crt_file:证书地点途径。
回来值。无。
留意事项。无。

3.3 向HTTP/HTTPS服务器发送form-data数据。

3.3.1 铲除form_data缓存。

铲除缓存的函数原型为:

void clear_multipart();

详细介绍如下所示。

函数名:clear_multipart()。
头文件。easyeai-api/common/http/https_request.h。
输入参数。无。
回来值。无。
留意事项。form-data的缓存只要一份,不管在何处履行,都会把form-data缓存给清空。若在多个线程履行此函数,需留意线程同步问题。

3.3.2 填充form_data缓存。

填充缓存的函数原型如下所示,传输的数据以键值对的办法传输。

void add_multipart_form_data(const char *key, const char *value);

详细介绍如下所示。

函数名:add_multipart_form_data()。
头文件。easyeai-api/common/http/https_request.h。
输入参数。key:form-data数据的键名。
value:form-data数据的内容。
回来值。无。
留意事项。form-data的缓存只要一份,一旦履行clear_multipart(),之前增加进缓存的form-data数据都会被清空,若在多个线程履行此函数,需求留意线程同步问题。

3.3.3 发送form-data数据。

因为HTTP和HTTPS的加密办法有所差异,故别离界说了两个函数,但参数共同,函数原型如下所示。

int32_t send_data_to_Http(const char *server, const char *func, char *result, uint32_t result_lenth);int32_t send_data_to_Https(const char *server, const char *func, char *result, uint32_t result_lenth);

详细介绍如下所示。

HTTP发送函数:send_data_to_Http()。
HTTPS发送函数:send_data_to_Https()。
头文件。easyeai-api/netProtocol_api/https/https_request.h。
输入参数。server:服务器url。
func:办法。
result:用于保存HTTP/HTTPS回来的body数据。
result_lenth:用户用于给body数据分配的最大空间。
回来值。-1:失利。
0:成功,函数内部会调用clear_multipart()清空缓存。
留意事项。该。接口。是对HTTP/HTTPS POST恳求的封装,会把form-data的缓存发送出去,调用成功后清空form-data缓存,多线程留意线程同步。

3.4 向HTTP/HTTPS服务器发送json数据。

因为HTTP和HTTPS的加密办法有所差异,故别离界说了两个函数,但参数共同,函数原型如下所示。

int32_t send_json_to_Http(const char *server, const char *func, const char *json, char *result, uint32_t result_length);int32_t send_json_to_Https(const char *server, const char *func, const char *json, char *result, uint32_t result_length);

详细介绍如下所示。

HTTP发送函数:send_json_to_Http()。
HTTPS发送函数:send_json_to_Https()。
头文件。easyeai-api/netProtocol_api/https/https_request.h。
输入参数。server:服务器url。
func:办法。
json:待发送的json字符串。
result:用于保存HTTP/HTTPS回来的body数据。
result_lenth:用户用于给body数据分配的最大空间。
回来值。-1:失利。
0:成功。
留意事项。无。

3.5 向HTTP/HTTPS服务器获取文件。

因为HTTP和HTTPS的加密办法有所差异,故别离界说了两个函数,但参数共同,函数原型如下所示。

int32_t get_file_from_https(const char *url, const char *func, const char *filePath);int32_t get_file_from_http(const char *url, const char *func, const char *filePath);

详细介绍如下所示。

HTTP获取文件函数:get_file_from_https()。
HTTPS获取文件函数:get_file_from_http()。
头文件。easyeai-api/netProtocol_api/https/https_request.h。
输入参数。url:服务器url途径。
func:办法。
filePath:用于寄存所获取文件的本地途径。
回来值。Success。
Unknown。
Connec。ti。on。
BindIPAddress。
Read。
Write。
ExceedRedirectCount。
Can。ce。led。
SSLConnection。
SSLLo。adi。ngCerts。
SSLServerVerification。
UnsupportedMultipartBoundaryChars。
Compression。
留意事项。该接口是对HTTP/HTTPS GET恳求的封装。

4. 运用实例。

示例代码途径为EASY-EAI-Toolkit-3576/Demos/common-http/ test-http_client.c。

4.1 设置CRT密钥文件。

设置密钥文件操作如下所示。

set_customer_crt("/userdata/customer.crt");

4.2 发送form_data数据。

4.2.1 填充数据。

清空form_data数据缓冲区,然后填充form_data缓冲区数据。

clear_multipart();add_multipart_form_data("name", "gzlmo");add_multipart_form_data("id", "888888");add_multipart_form_data("pwd", "123456");

4.2.2 发送数据。

发送操作如下所示。

send_data_to_Http("192.168.3.191:50000", "/add", res, sizeof(res));

4.3 发送json数据。

发送操作如下所示。

send_json_to_Http("192.168.3.191:50000", "/add", "{name : "gzlmo"}", res, sizeof(res));

内容来源:https://fastrans.nhobethoi.com/app-1/topbet88,https://chatbotjud-hml.saude.mg.gov.br/app-1/survivalcraft

本文地址:http://w.21nx.com/news/29532284-77d02599897.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。