針對Http請求操作的庫,ESP8266HTTPClient庫不屬於ESP8266WiFi庫的一部分,所以需要引入 #include <ESP8266HTTPClient.h>
HTTP是一個應用層協議,由請求和響應構成,是一個標准的客戶端服務器模型。HTTP默認的端口號是80,HTTPS的端口號是443
HTTP特點
簡單快速:客戶端向服務端請求服務時,只需要傳送請求方法和路徑。HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度快
靈活:HTTP允許傳輸任意類型的數據對象,正在傳輸的類型由Content-Type加以標記
HTTP0.9和1.0使用非持續連接:限制每次連接都只處理一個請求,服務端處理完客戶的請求,並收到客戶的應答后,即斷開連接
HTTP1.1使用持續連接:不必為每個web對象創建一個新連接,一個連接可以傳送多個對象,節省傳輸時間
無狀態:HTTP協議是無狀態。對於事務處理沒有記憶能力,如果需要處理前面信息,則必須重傳,這樣可能導致每次連接傳送的數據量增大
HTTP工作流程
工作流程可分為4步:
首先客戶端 client與服務端 server建立連接
建立連接后,客戶端發送一個請求給服務端,請求方法的格式:統一資源標識符(URL)、HTTP協議版本號、請求頭、請求內容等
服務端接收到請求后,給予相應的響應信息,其格式為:狀態行(包括協議版本、成功或者失敗代碼)、服務器信息、實體信息等
客戶端接收到服務端返回的信息,通過瀏覽器顯示在用戶的顯示屏上,然后客戶端與服務端斷開連接
以上四步驟,只要其中一步出現錯誤,那么就會產生錯誤信息返回給客戶端
HTTP請求
客戶端發送一個HTTP請求到服務器,請求信息包括以下格式:
- 請求行(request line)
- 請求頭部(header)
- 空行 (empty line)
- 請求數據 (request body)
Get請求
GET /562f25980001b1b106000338.jpg HTTP/1.1 Host img.mukewang.com User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 Accept image/webp,image/*,*/*;q=0.8 Referer http://www.imooc.com/ Accept-Encoding gzip, deflate, sdch Accept-Language zh-CN,zh;q=0.8
1.第一部分:請求行,用來說明請求類型,要訪問的資源以及所使用的HTTP版本
GET說明請求類型為GET, [/562f25980001b1b106000338.jpg]為要訪問的資源, 該行的最后一部分說明使用的是HTTP1.1版本
2.第二部分:請求頭部,緊接着請求行(即第一行)之后的部分,用來說明服務器要使用的附加信息:
從第二行起為請求頭部,HOST將指出請求的目的地
User-Agent,服務器端和客戶端腳本都能訪問它,它是瀏覽器類型檢測邏輯的重要基礎
該信息由你的瀏覽器來定義,並且在每個請求中自動發送等等
3.第三部分:空行,請求頭部后面的空行是必須的:
即使第四部分的請求數據為空,也必須有空行
4.第四部分:請求數據也叫主體,可以添加任意的其他數據
這個例子的請求數據為空
POST請求
1 POST / HTTP1.1 2 Host:www.wrox.com 3 User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022) 4 Content-Type:application/x-www-form-urlencoded 5 Content-Length:40 6 Connection: Keep-Alive 7 8 name=Professional%20Ajax&publisher=Wiley
- 第一部分:請求行,第一行明了是post請求,以及http1.1版本。
- 第二部分:請求頭部,第二行至第六行。
- 第三部分:空行,第七行的空行。
- 第四部分:請求數據,第八行
HTTP Response響應信息
一般情況下,服務端接收並處理客戶端發過來的請求會返回一個HTTP的響應信息。HTTP響應也由四個部分組成,分別是:
- 狀態行
- 消息報頭
- 空行
- 響應正文
第一部分:狀態行,由HTTP協議版本號, 狀態碼, 狀態消息 三部分組成
第一行為狀態行,(HTTP/1.1)表明HTTP版本為1.1版本,狀態碼為200,狀態消息為(ok)
HTTP狀態碼
狀態代碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別:
- 1xx:指示信息–表示請求已接收,繼續處理
- 2xx:成功–表示請求已被成功接收、理解、接受
- 3xx:重定向–要完成請求必須進行更進一步的操作
- 4xx:客戶端錯誤–請求有語法錯誤或請求無法實現
- 5xx:服務器端錯誤–服務器未能實現合法的請求
常見狀態碼:
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden //服務器收到請求,但是拒絕提供服務
404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //服務器發生不可預期的錯誤
503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間后可能恢復正常
1.http請求方法
1.1 begin —— 封裝請求Url
bool begin(String url); bool begin(String host, uint16_t port, String uri = "/"); //host String(192.168.1.12,不需要帶上http://前綴)
注意點:url可以有以下幾種形態:
1. http://192.168.1.12/test.html 2. http://user:password@192.168.1.12/test.html 3. http://user:password@192.168.1.12:8888/test.html
對於1,沒有Authorization(跟用戶校驗有關,會轉成base64編碼),也沒有重新設置端口(默認端口80);
對於2,有Authorization(user:password,跟用戶校驗有關,會轉成base64編碼),但沒有重新設置端口;
對於3,有Authorization也有重新設置端口號為8888;
資料 https://blog.csdn.net/dpjcn1990/article/details/92830108
天子驕龍