女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

基于RK3576開發板的http/https通訊

ljx2016 ? 來源:ljx2016 ? 作者:ljx2016 ? 2025-05-10 11:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1. HTTP/HTTPS簡介

HTTP(全稱:Hyper Text 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規定了請求報文和響應報文的格式。

請求報文格式如下所示。

wKgZO2geyZuAesvHAAAurVe-5JM872.png

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

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

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

狀態行(包含協議版本、狀態值、狀態短語);

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

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

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

wKgZPGgeyZyABY9ZAAFXplfSI7E288.png

1.3 URL

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

wKgZO2geyZyAQMp0AADTwIDpPRE470.jpg

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

wKgZPGgeyZyAYRRKAAB_2ysayqM822.jpg

具體內容如下所示。

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

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

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

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

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

1.4 HTTPS使用要點

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

CA證書,HTTPS協議用SSL/TSL;

發送數據使用POST請求,服務器地址使用URL格式表示;

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

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

2. 快速上手

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

2.1 源碼工程下載

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

cd ~/nfsroot
mkdir GitHub
cd GitHub

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

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

注:

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

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

2.2 開發環境搭建

通過adb shell進入板卡開發環境,如下圖所示。

wKgZPGgeyZ2AWt8AAADSohVEhNc916.png

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

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

2.3 例程編譯

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

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

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

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

2.4 例程運行及效果

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

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

執行效果如下所示。

wKgZO2geyZ2APNShAACKJ6Ng2D0775.png

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_DIRS} -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
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 發送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));

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

    關注

    13

    文章

    9748

    瀏覽量

    87536
  • HTTP
    +關注

    關注

    0

    文章

    523

    瀏覽量

    32597
  • 開發板
    +關注

    關注

    25

    文章

    5615

    瀏覽量

    103460
  • rk3576
    +關注

    關注

    1

    文章

    162

    瀏覽量

    641
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    基于RK3576開發板的WDT看門狗使用說明

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

    基于RK3576開發板的PCIE固態硬盤使用說明

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

    基于RK3576開發板的TF卡槽使用說明

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

    基于RK3576開發板的PWN使用說明

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

    基于RK3576開發板的RTC使用說明

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

    基于RK3576開發板的人臉識別算法

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

    新品體驗 | RK3576開發板

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

    米爾RK3576開發板特惠活動!

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

    敬請期待 | 迅為RK3576開發板即將發布

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

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

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

    迅為RK3576開發板Android?多屏顯示

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

    RK3576開發板技術分享 | Weston 配置技巧:定制你的桌面體驗!

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

    基于RK3576開發板的MIPI-DSI使用

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

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

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

    基于RK3576開發板的HDMI-OUT使用說明

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