曰本美女∴一区二区特级A级黄色大片, 国产亚洲精品美女久久久久久2025, 页岩实心砖-高密市宏伟建材有限公司, 午夜小视频在线观看欧美日韩手机在线,国产人妻奶水一区二区,国产玉足,妺妺窝人体色WWW网站孕妇,色综合天天综合网中文伊,成人在线麻豆网观看

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于RK3576開發(fā)板的http/https通訊

ljx2016 ? 來源:ljx2016 ? 作者:ljx2016 ? 2025-05-10 11:24 ? 次閱讀

1. HTTP/HTTPS簡介

HTTP(全稱:Hyper Text Transfer Protocol,超文本傳輸協(xié)議)是互聯(lián)網(wǎng)上應用最為廣泛的一種網(wǎng)絡協(xié)議,是一個客戶端和服務器請求和應答標準,用于從WWW服務器傳輸超文本到本地的傳輸協(xié)議。

而HTTPS(全稱:Hyper Text Transfer Protocol over SecureSocket Layer)是以安全為目標的HTTP通道,在原有HTTP的基礎(chǔ)上通過傳輸加密和身份認證(即增加SSL/TSL安全訪問協(xié)議)保證了傳輸過程的安全性。

1.1 HTTP和HTTPS的區(qū)別

HTTP和HTTPS的區(qū)別如下所示。

協(xié)議 HTTP HTTPS
CA證書 不需要 需要
傳輸加密方式 明文傳輸,無加密 SSL/TSL加密傳輸
連接方式 端口號使用80 端口號使用443
連接狀態(tài) 無狀態(tài)的 由SSL+HTTP協(xié)議構(gòu)建的可進行加密傳輸、身份認證的網(wǎng)絡協(xié)議

1.2 請求和響應

典型的HTTP/HTTPS通訊就是應用在瀏覽器與網(wǎng)頁服務器之間,瀏覽器即為客戶端,負責發(fā)出請求,接收報文,渲染顯示效果。網(wǎng)頁服務器即為服務器,負責應答請求,管理服務器文件、處理具體業(yè)務。而在某些情況中,HTTP可以作為信息交換的通訊規(guī)則。

客戶端需要資源時發(fā)送出來的即為請求報文,服務器接收到請求后向客戶端返回的就是響應報文,HTTP規(guī)定了請求報文和響應報文的格式。

請求報文格式如下所示。

wKgZO2geyZuAesvHAAAurVe-5JM872.png

對于本文而言,我們主要關(guān)注請求方法和URL即可。

請求行
報文元素 描述
請求方法 常見的方法有:
GET:用于檢索和獲取服務器的資源,請求內(nèi)容會在URL上顯示;
POST:用于創(chuàng)建或更新服務器的內(nèi)容,請求內(nèi)容不會在URL上顯示,而是在顯示在主體內(nèi)。
URL 服務器的虛擬文件路徑,將在下面章節(jié)重點介紹。

響應報文示例如下所示,主要組成部分有:

狀態(tài)行(包含協(xié)議版本、狀態(tài)值、狀態(tài)短語);

響應消息頭(以鍵值對的形式存在,例如時間、數(shù)據(jù)類型、數(shù)據(jù)長度等);

空行(用于區(qū)分報文頭和響應正文);

響應正文(對于網(wǎng)頁而言,常見的是html代碼,也可以是音視頻文件、圖片,通常是消息報頭的Content-Type指定)。

wKgZPGgeyZyABY9ZAAFXplfSI7E288.png

1.3 URL

假設我們搭建了一個環(huán)境檢測服務器系統(tǒng),用于采集、記錄全市各個觀測點的環(huán)境數(shù)據(jù),假定服務器的存放結(jié)構(gòu)如下所示,此服務器在公網(wǎng)上的域名為www.huanjin.com,里面有兩個設備,每個設備存放了不同日子的氣溫數(shù)據(jù),當客戶端需要調(diào)取具體設備具體數(shù)據(jù)時,則需要提交一個唯一的路徑給服務器查找,這個唯一路徑就是URL。

wKgZO2geyZyAQMp0AADTwIDpPRE470.jpg

URL(Uniform Resource Locator,統(tǒng)一資源定位符),存放在請求報文的請求行內(nèi),充當路標作用。當我們?yōu)g覽網(wǎng)頁時,點擊進入不同的組件,瀏覽器就會自動的幫我們填充不同的URL,地址的構(gòu)成如下所示。完整的URL包含:協(xié)議部分、網(wǎng)址部分、文件地址。

wKgZPGgeyZyAYRRKAAB_2ysayqM822.jpg

具體內(nèi)容如下所示。

組成部分 描述
協(xié)議 以“//”分割,常見的有http和https;
網(wǎng)址 是公網(wǎng)上獨一無二的域名,即人們常見的www.baidu.com等
文件地址 從域名后的第一個“/”到最后一個“/”前的內(nèi)容,被稱為虛擬目錄
從最后一個“/”后到“#”前,即為文件名

例如我們想獲取環(huán)境檢測服務器中設備1的12月25號數(shù)據(jù),填寫的請求報文就是,GET請求,URL為“http://www.huanjin.com/Device-1/日期數(shù)據(jù)/20211225”。

URL還可以攜帶變量信息,名稱為URL查詢字符串,形式為:

https://www.Adblock.com/s?a=123&b=234

變量存放在URL結(jié)尾處,以“?”開頭,以“參數(shù)名=值”的鍵值對形式存放,多個參數(shù)用“&”分割。

1.4 HTTPS使用要點

通過以上敘述可知,使用HTTPS需要時刻圍繞以下幾點:

CA證書,HTTPS協(xié)議用SSL/TSL;

發(fā)送數(shù)據(jù)使用POST請求,服務器地址使用URL格式表示;

接收數(shù)據(jù)、文件使用GET請求,服務器地址使用URL格式表示;

我司的easyeai-api軟件開源庫將復雜的報文格式、收發(fā)操作做了統(tǒng)一的封裝,為客戶提供簡單便捷的調(diào)用方式實現(xiàn)HTTP/HTTPS通訊功能。

2. 快速上手

如果您初次閱讀此文檔,請閱讀:《入門指南/源碼管理及編程介紹/源碼工程管理》,按需管理自己工程源碼(注:此文檔必看,并建議采用【遠程掛載管理】方式,否則有代碼丟失風險!?。。?/p>

2.1 源碼工程下載

先在PC虛擬機定位到nfs服務目錄,再在目錄中創(chuàng)建存放源碼倉庫的管理目錄:

cd ~/nfsroot
mkdir GitHub
cd GitHub

再通過git工具,在管理目錄內(nèi)克隆遠程倉庫(需要設備能對外網(wǎng)進行訪問)

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

注:

* 此處可能會因網(wǎng)絡原因造成卡頓,請耐心等待。

* 如果實在要在gitHub網(wǎng)頁上下載,也要把整個倉庫下載下來,不能單獨下載本實例對應的目錄。

2.2 開發(fā)環(huán)境搭建

通過adb shell進入板卡開發(fā)環(huán)境,如下圖所示。

wKgZPGgeyZ2AWt8AAADSohVEhNc916.png

通過以下命令,把nfs目錄掛載上nfs服務器。

mount -t nfs -o nolock : /home/orin-nano/Desktop/nfs/
wKgZO2geyZ2AU3BAAAEcDIcfp0I783.png

2.3 例程編譯

然后定位到nfs的掛載目錄,再在目錄中創(chuàng)建存放源碼倉庫的管理目錄:

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

進入到對應的例程目錄執(zhí)行編譯操作,具體命令如下所示:

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

2.4 例程運行及效果

進入Release目錄,執(zhí)行下方命令,運行示例程序:

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

執(zhí)行效果如下所示。

wKgZO2geyZ2APNShAACKJ6Ng2D0775.png

API的詳細說明,以及API的調(diào)用(本例程源碼),詳細信息見下方說明。

3. HTTPS庫函數(shù)說明

本章節(jié)介紹EASY EAI的HTTPS庫函數(shù)的使用方法。

3.1 引用方式

EASY EAI api庫位于本倉庫的easyeai-api目錄中。為方便客戶在本地工程中直接調(diào)用我們的EASY EAI api庫,此處列出工程中需要鏈接的庫以及頭文件等,方便用戶直接添加。

描述 CMake寫法 Makefile寫法
api.cmake ${common_root}/http/api.cmake
頭文件目錄 ${HTTP_INCLUDE_DIRS} -I ../../easyeai-api/common/http
源文件目錄 ${HTTP_SOURCE_DIRS} ../../easyeai-api/common/http
庫文件目錄
庫鏈接參數(shù) ${HTTP_LIBS}

API源代碼路徑為EASY-EAI-Toolkit-3576/easyeai-api/common/http/。用戶可通過源代碼了解接口實現(xiàn),甚至可對源碼進行修改。

3.2 設置證書

設置證書的函數(shù)原型為:

void set_customer_crt(const char *crt_file);

具體介紹如下所示。

函數(shù)名:set_customer_crt()
頭文件 easyeai-api/common/http/https_request.h
輸入?yún)?shù) crt_file:證書所在路徑
返回值
注意事項

3.3 向HTTP/HTTPS服務器發(fā)送form-data數(shù)據(jù)

3.3.1 清除form_data緩存

清除緩存的函數(shù)原型為:

void clear_multipart();

具體介紹如下所示。

函數(shù)名:clear_multipart()
頭文件 easyeai-api/common/http/https_request.h
輸入?yún)?shù)
返回值
注意事項 form-data的緩存只有一份,無論在何處執(zhí)行,都會把form-data緩存給清空。若在多個線程執(zhí)行此函數(shù),需注意線程同步問題。

3.3.2 填充form_data緩存

填充緩存的函數(shù)原型如下所示,傳輸?shù)臄?shù)據(jù)以鍵值對的形式傳輸。

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

具體介紹如下所示。

函數(shù)名:add_multipart_form_data()
頭文件 easyeai-api/common/http/https_request.h
輸入?yún)?shù) key:form-data數(shù)據(jù)的鍵名
value:form-data數(shù)據(jù)的內(nèi)容
返回值
注意事項 form-data的緩存只有一份,一旦執(zhí)行clear_multipart(),之前添加進緩存的form-data數(shù)據(jù)都會被清空,若在多個線程執(zhí)行此函數(shù),需要注意線程同步問題。

3.3.3 發(fā)送form-data數(shù)據(jù)

由于HTTP和HTTPS的加密方式有所區(qū)別,故分別定義了兩個函數(shù),但參數(shù)一致,函數(shù)原型如下所示。

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發(fā)送函數(shù):send_data_to_Http()
HTTPS發(fā)送函數(shù):send_data_to_Https()
頭文件 easyeai-api/netProtocol_api/https/https_request.h
輸入?yún)?shù) server:服務器url
func:方法
result:用于保存HTTP/HTTPS返回的body數(shù)據(jù)
result_lenth:用戶用于給body數(shù)據(jù)分配的最大空間
返回值 -1:失敗
0:成功,函數(shù)內(nèi)部會調(diào)用clear_multipart()清空緩存
注意事項 接口是對HTTP/HTTPS POST請求的封裝,會把form-data的緩存發(fā)送出去,調(diào)用成功后清空form-data緩存,多線程注意線程同步

3.4 向HTTP/HTTPS服務器發(fā)送json數(shù)據(jù)

由于HTTP和HTTPS的加密方式有所區(qū)別,故分別定義了兩個函數(shù),但參數(shù)一致,函數(shù)原型如下所示。

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發(fā)送函數(shù):send_json_to_Http()
HTTPS發(fā)送函數(shù):send_json_to_Https()
頭文件 easyeai-api/netProtocol_api/https/https_request.h
輸入?yún)?shù) server:服務器url
func:方法
json:待發(fā)送的json字符串
result:用于保存HTTP/HTTPS返回的body數(shù)據(jù)
result_lenth:用戶用于給body數(shù)據(jù)分配的最大空間
返回值 -1:失敗
0:成功
注意事項

3.5 向HTTP/HTTPS服務器獲取文件

由于HTTP和HTTPS的加密方式有所區(qū)別,故分別定義了兩個函數(shù),但參數(shù)一致,函數(shù)原型如下所示。

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獲取文件函數(shù):get_file_from_https()
HTTPS獲取文件函數(shù):get_file_from_http()
頭文件 easyeai-api/netProtocol_api/https/https_request.h
輸入?yún)?shù) url:服務器url路徑
func:方法
filePath:用于存放所獲取文件的本地路徑
返回值 Success
Unknown
Connection
BindIPAddress
Read
Write
ExceedRedirectCount
Canceled
SSLConnection
SSLLoadingCerts
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 發(fā)送form_data數(shù)據(jù)

4.2.1 填充數(shù)據(jù)

清空form_data數(shù)據(jù)緩沖區(qū),然后填充form_data緩沖區(qū)數(shù)據(jù)。

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

4.2.2 發(fā)送數(shù)據(jù)

發(fā)送操作如下所示。

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

4.3 發(fā)送json數(shù)據(jù)

發(fā)送操作如下所示。

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務器
    +關(guān)注

    關(guān)注

    12

    文章

    9618

    瀏覽量

    87070
  • HTTP
    +關(guān)注

    關(guān)注

    0

    文章

    518

    瀏覽量

    32343
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5432

    瀏覽量

    101236
  • rk3576
    +關(guān)注

    關(guān)注

    1

    文章

    125

    瀏覽量

    497
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    基于RK3576開發(fā)板的WDT看門狗使用說明

    RK3576開發(fā)板的WDT使用說明
    的頭像 發(fā)表于 05-06 17:15 ?368次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的WDT看門狗使用說明

    基于RK3576開發(fā)板的PCIE固態(tài)硬盤使用說明

    RK3576開發(fā)板的PICE固態(tài)硬盤使用方法
    的頭像 發(fā)表于 05-06 17:33 ?1064次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的PCIE固態(tài)硬盤使用說明

    基于RK3576開發(fā)板的TF卡槽使用說明

    RK3576開發(fā)板使用TF卡槽
    的頭像 發(fā)表于 05-07 09:24 ?441次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的TF卡槽使用說明

    基于RK3576開發(fā)板的PWN使用說明

    RK3576開發(fā)板使用PWN教程及Demo
    的頭像 發(fā)表于 05-07 14:07 ?1026次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的PWN使用說明

    基于RK3576開發(fā)板的RTC使用說明

    文章主要展示RK3576開發(fā)板的RTC信息和快速上手例程
    的頭像 發(fā)表于 05-07 15:04 ?481次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的RTC使用說明

    基于RK3576開發(fā)板的人臉識別算法

    RK3576開發(fā)板展示人臉識別算法例程和API說明
    的頭像 發(fā)表于 05-07 16:48 ?904次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的人臉識別算法

    新品體驗 | RK3576開發(fā)板

    RK3399、RK3566、RK3568、RK3588、RK3576等型號的核心與評估
    的頭像 發(fā)表于 11-01 08:08 ?1615次閱讀
    新品體驗 | <b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>

    米爾RK3576開發(fā)板特惠活動!

    近日,米爾電子發(fā)布基于瑞芯微RK3576核心開發(fā)板RK3576作為國產(chǎn)熱門處理器,其高性能數(shù)據(jù)處理能力、領(lǐng)先的AI智能分析、強大的擴展性與兼容性受到廣大
    的頭像 發(fā)表于 11-12 01:00 ?640次閱讀
    米爾<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>特惠活動!

    敬請期待 | 迅為RK3576開發(fā)板即將發(fā)布

    敬請期待 | 迅為RK3576開發(fā)板即將發(fā)布
    的頭像 發(fā)表于 11-22 15:13 ?469次閱讀
    敬請期待 | 迅為<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>即將發(fā)布

    迅為RK3576開發(fā)板核心與底板接口硬件介紹

    迅為RK3576開發(fā)板核心與底板接口硬件介紹
    的頭像 發(fā)表于 01-14 15:15 ?1119次閱讀
    迅為<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>核心<b class='flag-5'>板</b>與底板接口硬件介紹

    迅為RK3576開發(fā)板Android?多屏顯示

    迅為RK3576開發(fā)板Android?多屏顯示
    的頭像 發(fā)表于 01-16 16:58 ?707次閱讀
    迅為<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>Android?多屏顯示

    RK3576開發(fā)板技術(shù)分享 | Weston 配置技巧:定制你的桌面體驗!

    RK3576開發(fā)板技術(shù)分享 | Weston 配置技巧:定制你的桌面體驗!
    的頭像 發(fā)表于 03-07 10:17 ?420次閱讀
    <b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>技術(shù)分享 | Weston 配置技巧:定制你的桌面體驗!

    基于RK3576開發(fā)板的MIPI-DSI使用

    MIPI DSI接口是由MIPI聯(lián)盟下的Display工作組指定的DSI(Display Serial Interface)的接口標準。rk3576開發(fā)板使用mipi-dsi教程
    的頭像 發(fā)表于 05-06 16:11 ?163次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的MIPI-DSI使用

    基于RK3576開發(fā)板的揚聲器和耳機使用說明

    RK3576開發(fā)板的揚聲器和耳機使用說明
    的頭像 發(fā)表于 05-06 16:36 ?110次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的揚聲器和耳機使用說明

    基于RK3576開發(fā)板的HDMI-OUT使用說明

    RK3576開發(fā)板的HDMI-OUT使用說明
    的頭像 發(fā)表于 05-06 16:48 ?97次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的HDMI-OUT使用說明