當任何兩個電子設備需要相互通信時,它們必須使用通用協(xié)議或消息系統(tǒng)。如果一個設備嘗試使用協(xié)議A發(fā)送消息而另一個設備正在使用協(xié)議B,則這兩個設備永遠不能交換數(shù)據(jù)(他們會將對方的消息視為垃圾)。因此,為了使互聯(lián)網(wǎng)正常運行,設備必須使用通用協(xié)議進行通信,這就是IP或互聯(lián)網(wǎng)協(xié)議的用武之地。
IP本身相當復雜,由幀,標題,位置組成,等,但幸運的是,大多數(shù)互聯(lián)網(wǎng)控制器,如以太網(wǎng)IC和Wi-Fi適配器自動處理協(xié)議。這通常意味著用戶只需要發(fā)送簡單的命令,例如“打開套接字到IP設備”和“發(fā)送此數(shù)據(jù)包”。
UDP Internet協(xié)議
但是,IP只是通過打開發(fā)送器和接收器上的套接字來處理物理通信鏈路(因此可以傳輸二進制數(shù)據(jù))。理解這一點的一種簡單方法是將IP視為物理鏈接兩個設備的系統(tǒng)(例如使用以太網(wǎng)電纜連接兩臺計算機),因此當一臺設備發(fā)出兩位數(shù)據(jù)時,另一臺設備將看到相同的兩臺相同的數(shù)據(jù)位。要讓兩個設備了解這些位實際意味著什么,我們需要使用消息傳遞協(xié)議。雖然互聯(lián)網(wǎng)上使用了許多協(xié)議,但最常見的協(xié)議稱為HTTP。
HTTP或超文本傳輸協(xié)議定義了如何解釋通過兩個設備之間的套接字發(fā)送/接收的數(shù)據(jù)。 HTTP(HTTPS是加密的安全版本),是現(xiàn)有的每個網(wǎng)站上使用的協(xié)議,非常簡單。但HTTP并不僅限于網(wǎng)站。我們也可以將它用于物聯(lián)網(wǎng)應用,這就是你現(xiàn)在需要學習的原因!
為什么HTTP如此驚人
HTTP是一個了不起的協(xié)議,原因如下:
所有消息是ASCII文本格式(非常適合數(shù)據(jù)大小和易用性)
所有行都以car 返回換行符(0x0A 0x0D或\ r \ n)終止
所有消息都“按原樣”并且根本沒有摻假(即原始文本)
可以使用字符串數(shù)據(jù)類型在代碼中輕松實現(xiàn)
當客戶端(例如PC或平板電腦)想要打開網(wǎng)頁(例如,index.html)時,客戶端首先需要打開一個套接字才能連接到端口80上有問題的服務器。
在本文中,我們將使用The Gentleman Maker的MicroPython代碼:All About Circuits上的IoT Teapotproject。這段代碼不是HTTP,而是IP,它是我們的客戶端和服務器連接在一起的。
第一行創(chuàng)建一個名為sock的套接字對象,第二行獲取網(wǎng)站的IP地址我們想要連接到端口80(因為它可以動態(tài)更改),最后一行創(chuàng)建一個地址對象,包括服務器的IP地址和端口號。您需要更改的唯一參數(shù)是“iot.yourwebsite.co.uk”到您要連接的任何網(wǎng)站。
知道IP地址,是時候打開客戶端和服務器之間的連接。使用下面顯示的命令很容易做到:
如果一切按計劃進行,您現(xiàn)在應該在客戶端和服務器之間建立了鏈接。此時,您可以使用sock.send(此處為您的數(shù)據(jù))通過套接字發(fā)送數(shù)據(jù),但如果服務器不理解數(shù)據(jù),則會響應錯誤代碼。那么,讓我們學習如何使用GET命令請求數(shù)據(jù)!
**注意:確保您通過套接字發(fā)送的任何數(shù)據(jù)都被編碼為二進制格式,因為MicroPython中的套接字只發(fā)送二進制數(shù)據(jù)!
GET命令
GET是用于指令的命令請求網(wǎng)頁或文件內(nèi)容,例如.html,.htm和.txt。 GET消息至少包含三行(所有行都以回車換行符終止):
GET 《您想要的文件》 HTTP/1.1 \ r \ n
主持人:《網(wǎng)站域名》 \ r \ n
\ r \ n
第一行以GET,然后是需要的文件。例如,如果我們想要index.html文件,我們將用/index.html替換上面顯示的文本。第二行是主機域,例如maker.pro,但不包括http或www。最后一行是一個空行,必須是空的!這表示消息結束,服務器將識別它現(xiàn)在需要處理GET請求。完整的消息和使其工作的代碼如下所示。
HTTP響應
發(fā)送請求后,服務器將處理該消息,然后發(fā)送響應。響應將包含三個主要部分:
成功/錯誤代碼
元數(shù)據(jù)
請求的文件內(nèi)容
為了更好地理解響應內(nèi)容,讓我們看一下茶壺項目的GET請求。
成功/錯誤代碼是以黃色突出顯示的第一行,如果請求成功或失敗,則通知客戶端。此行上的第二個數(shù)字(在本例中為200)是響應代碼,可用于確定是否出現(xiàn)錯誤(非常常見的錯誤代碼為404,這意味著所請求的文件不存在)。所以讓我們看看一些常見的錯誤代碼。
200 - 好的 - 一切順利:)
400 - 錯誤請求
401 - 未經(jīng)授權的訪問
403 - 禁止訪問
404 - 未找到
408 - 請求超時
429 - 請求過多
500 - 內(nèi)部服務器錯誤
502 - 錯誤網(wǎng)關
下一部分數(shù)據(jù)(以藍色突出顯示)是元數(shù)據(jù),其中包括當前日期/時間,服務器類型,編碼方法,數(shù)據(jù)類型和數(shù)據(jù)長度等信息。最后一塊數(shù)據(jù)(以綠色突出顯示)是所請求文件的內(nèi)容。
POST命令
我們將看到的第二個命令是POST命令,它用于將數(shù)據(jù)發(fā)送到服務器。在處理需要上傳傳感器數(shù)據(jù)或命令以控制其他設備的物聯(lián)網(wǎng)設備時,這非常有用。通常,POST用于將數(shù)據(jù)發(fā)送到php腳本文件,然后該腳本文件可以根據(jù)提交的數(shù)據(jù)的值執(zhí)行操作。那么讓我們看看我們?nèi)绾螌⒁恍┳兞堪l(fā)送到php頁面!
和以前一樣,第一行有POST命令和我們發(fā)送的頁面數(shù)據(jù)到。接下來的幾行(以藍色突出顯示)是元數(shù)據(jù),其中包括正在發(fā)送的內(nèi)容類型及其大小(請記住,在內(nèi)容長度之后需要有一個空行),最后一行是我們的數(shù)據(jù)發(fā)送。在這種情況下,php腳本將接收兩個名為temperature(其值為10)和濕度(其值為20)的變量。
結論
這篇文章只是在HTTP權力的表面上擦除。通過在PHP中編碼網(wǎng)站,添加登錄頁面以及了解錯誤代碼,我們可以使任何支持互聯(lián)網(wǎng)的設備從互聯(lián)網(wǎng)獲取信息并將數(shù)據(jù)上傳到網(wǎng)站。
-
HTTP
+關注
關注
0文章
510瀏覽量
31358
發(fā)布評論請先 登錄
相關推薦
評論