根据RK3576开发板的http/https通讯
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
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。