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的區別如下所示。

1.2 請求和響應
典型的HTTP/HTTPS通訊就是應用在瀏覽器與網頁服務器之間,瀏覽器即為客戶端,負責發出請求,接收報文,渲染顯示效果。網頁服務器即為服務器,負責應答請求,管理服務器文件、處理具體業務。而在某些情況中,HTTP可以作為信息交換的通訊規則。
客戶端需要資源時發送出來的即為請求報文,服務器接收到請求后向客戶端返回的就是響應報文,HTTP規定了請求報文和響應報文的格式。
請求報文格式如下所示。

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

響應報文示例如下所示,主要組成部分有:
l 狀態行(包含協議版本、狀態值、狀態短語);
l 響應消息頭(以鍵值對的形式存在,例如時間、數據類型、數據長度等);
l 空行(用于區分報文頭和響應正文);
l 響應正文(對于網頁而言,常見的是html代碼,也可以是音視頻文件、圖片,通常是消息報頭的Content-Type指定)。

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

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

具體內容如下所示。

例如我們想獲取環境檢測服務器中設備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需要時刻圍繞以下幾點:
l CA證書,HTTPS協議用SSL/TSL;
l 發送數據使用POST請求,服務器地址使用URL格式表示;
l 接收數據、文件使用GET請求,服務器地址使用URL格式表示;
我司的easyeai-api軟件開源庫將復雜的報文格式、收發操作做了統一的封裝,為客戶提供簡單便捷的調用方式實現HTTP/HTTPS通訊功能。
2. 快速上手
2.1 開發環境準備
如果您初次閱讀此文檔,請閱讀《入門指南/開發環境準備/Easy-Eai編譯環境準備與更新》,并按照其相關的操作,進行編譯環境的部署。
在PC端Ubuntu系統中執行run腳本,進入EASY-EAI編譯環境,具體如下所示。
cd ~/develop_environment ./run.sh 2204

2.2 源碼下載以及例程編譯
在EASY-EAI編譯環境下創建存放源碼倉庫的管理目錄:
cd /opt mkdir EASY-EAI-Toolkit cd EASY-EAI-Toolkit
通過git工具,在管理目錄內克隆遠程倉庫
git clone https://github.com/EASY-EAI/EASY-EAI-Toolkit-1126B.git

注:
* 此處可能會因網絡原因造成卡頓,請耐心等待。
* 如果實在要在gitHub網頁上下載,也要把整個倉庫下載下來,不能單獨下載本實例對應的目錄。
進入到對應的例程目錄執行編譯操作,具體命令如下所示:
cd EASY-EAI-Toolkit-1126B/Demos/netProtocol-http/ ./build.sh
注:
* 由于依賴庫部署在板卡上,因此交叉編譯過程中必須保持/mnt掛載。

2.3 例程運行
通過串口調試或ssh調試,進入板卡后臺,定位到例程部署的位置,如下所示:
cd /userdata/Demo/netProtocol-http

運行例程命令如下所示:
./test-http_server & ./test-http_client
2.4 運行效果
執行效果如下所示。

3. HTTPS庫函數說明
本章節介紹EASY EAI的HTTPS庫函數的使用方法。
3.1 引用方式
EASY EAI api庫位于本倉庫的easyeai-api目錄中。為方便客戶在本地工程中直接調用我們的EASY EAI api庫,此處列出工程中需要鏈接的庫以及頭文件等,方便用戶直接添加。

API源代碼路徑為EASY-EAI-Toolkit-1126B/easyeai-api/netProtocol/http/。用戶可通過源代碼了解接口實現,甚至可對源碼進行修改。
3.2 設置證書
設置證書的函數原型為:
void set_customer_crt(const char *crt_file);
具體介紹如下所示。

3.3 向HTTP/HTTPS服務器發送form-data數據
3.3.1 清除form_data緩存
清除緩存的函數原型為:
void clear_multipart();
具體介紹如下所示。

3.3.2 填充form_data緩存
填充緩存的函數原型如下所示,傳輸的數據以鍵值對的形式傳輸。
void add_multipart_form_data(const char *key, const char *value);
具體介紹如下所示。

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);
具體介紹如下所示。

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);
具體介紹如下所示。

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);
具體介紹如下所示。

4. 使用實例
示例代碼路徑為EASY-EAI-Toolkit-1126B/Demos/netProtocol-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));
-
Linux
+關注
關注
88文章
11758瀏覽量
219001 -
瑞芯微
+關注
關注
27文章
792瀏覽量
54274 -
EASY-EAI靈眸科技
+關注
關注
4文章
67瀏覽量
3610 -
RV1126B
+關注
關注
0文章
54瀏覽量
178
發布評論請先 登錄
瑞芯微(EASY EAI)RV1126B 音頻輸入
瑞芯微(EASY EAI)RV1126B PWM使用
【EASY EAI Nano-TB(RV1126B)開發板試用】+初識篇
【EASY EAI Nano-TB(RV1126B)開發板試用】命令行功能測試-shell腳本進行IO控制-燈閃
【EASY EAI Nano-TB(RV1126B)開發板試用】命令行功能測試-shell腳本進行IO控制-紅綠燈項目
【EASY EAI Nano-TB(RV1126B)開發板試用】命令行功能測試-shell腳本進行IO控制-紅綠燈按鈕項目
請問各位大佬,如何解決,瑞芯微 RV1126B 使用 mpp 自帶工具 調試時,內核直接報錯崩潰!
【EASY EAI Nano-TB(RV1126B)開發板試用】+1、開箱上電
【EASY EAI Nano-TB(RV1126B)開發板試用】介紹、系統安裝
RV1126系列選型指南:從RV1126到RV1126B,一文看懂升級差異
【免費試用】EASY EAI Nano-TB(RV1126B)開發套件評測
替代升級實錘!實測RV1126B,CPU性能吊打RV1126
瑞芯微(EASY EAI)RV1126B 人體關鍵點識別
瑞芯微(EASY EAI)RV1126B http/https
評論