HTTP(Hyper ?Text ?Transfer ?Protocol)即超文本傳輸協議,是一個簡單的請求-響應協議,通常運行在TCP之上,它指定了客戶端可能發送給服務器消息類型以及得到什么類型響應。HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer)即超文本傳輸安全協議,在HTTP的基礎下加入SSL,是以安全為目標的HTTP通道。這兩種協議目前廣泛運用于物聯網設備中,是物聯網工程師必備的技能。本文從函數接口、OpenCPU demo解析、注意事項三個方面對MN316 OpenCPU的HTTP demo及HTTPS demo進行解析。
一 、函數接口介紹
HTTP應用實例流程圖如下。
圖1 HTTP業務流程圖
連接HTTP首先需要創建一個客戶端實例。
圖2 創建客戶端實例
①url:即服務器的地址;
②callback:即客戶端相關的回調函數,可以為空;
③handle:實例句柄。
同時對于此客戶端實例進行相應的參數配置。
圖3 客戶端參數設置
①handle:實例句柄(客戶端);
②cfg:客戶端配置參數(具體參數如下)。
圖4 客戶端可配參數
接下來選擇HTTP請求類型。
圖5 發送請求
①handle:實例句柄(客戶端);
②param:發送請求的參數(具體如下)。
圖6 同步接口輸入參數
請求類型又分為:GET請求,請求指定的頁面信息;POST請求,向指定資源提交數據;PUT請求,向服務器指定的位置上傳最新的內容;DELETE請求,請求服務器刪除Request-URL資源;HEAD請求,用于獲取報頭信息。
圖7 HTTP請求類型
圖8 同步接口輸入參數
③response:HTTP請求所返回的結果及存放在此,其具體結構如下。
圖9 同步接口響應數據
得到結果后,釋放數據。
圖10 釋放響應數據接口
如果對安全性要求較高,則使用HTTPs來建立連接發送請求。具體實現方法參照上述HTTP應用實例流程,需注意,第②步配置參數時要將ssl_enable值設為1使能,在第③步前需添加一個設置ssl證書的步驟。
圖11 配置SSL參數
①ssl_id:同cm_HTTPclient_cfg_t中的ssl_id索引;
②type:ssl配置類型,具體有如下所示。
圖12 SSL配置類型
③value:ssl配置參數(即證書)格式如下。
圖13 根證書
1.6?其他函數介紹
①刪除客戶端實例;
圖14 刪除客戶端實例
②終止HTTP連接;
圖15 終止HTTP連接
圖16 獲取響應結果
二、OpenCPU demo解析
標準版SDK的demo中提供了6個與HTTP相關的測試項。
圖17 HTTP調用示例
在開始之前,需要先將服務器與相應路徑設置好,本文示例為:
圖18 HTTP設置服務器路徑
GET/PUT/POST/DELTE整個流程相似,這里用GET做解析。
圖19 HTTP GET Demo代碼
根據上文介紹,一次請求主要分為4步,本實例完整地體現出這四步。
①創建一個客戶端實例;
圖20 創建客戶端實例
②對這個客戶端實例進行參數配置;
圖21 配置客戶端參數
③發送具體請求,得到返回結果;
④釋放相應數據。
圖22 釋放相應數據
測試結果如下圖。
圖23 測試結果圖
成功對HTTP服務器發送了get請求。
2.2 HTTPS 無證書加密測試
調用HTTPS的請求示例API接口:CM:HTTP:HTTPSGETTEST
圖24 HTTPS配置參數
HTTPS GET與前面HTTP?GET的主要區別是在客戶端配置階段ssl使能。
圖25 HTTPS客戶端配置參數
以及配置了ssl,但是此處是為了無證書加密測試,無身份驗證,所以ssl實際上是空的。
圖26 配置無證書方式加密
執行結果如下圖:
圖27 HTTPS 無證書方式測試結果
2.3 HTTPS CA證書加密測試
這里就將上一節中ssl配置改為CA證書驗證,并添加CA證書。
圖28 添加CA證書
執行結果如下圖:
圖29 添加CA證書執行結果
可以看到,收到響應內容與沒有身份驗證時的數據并不相同,差異主要體現在報頭(header)的長度以及請求的內容(content)上。
三 、注意事項
- 在調用函數接口前,需確認模組是否成功駐網,并確認已經配置好服務器與相對路徑,否則可能導致調用函數接口無法收到正確的返回。
- demo中優先使用IPV6 DNS來解析,而有些SIM卡對于IPV6 DNS服務器請求會產生異常失敗,這時將HTTP參數中dns_priority 設置為1,即將dns解析設置為IPV4優先,再重新測試一下。
圖30 HTTP 可配參數