Python程式或瀏覽器向Web伺服器送出HTTP請求後,才能取得回應資料的網頁內容,如左圖所示(github.com/VanHakobyan/HTTP-Protocol-Manipulation)。
提示:本 ESP8266 實作系列是以 Thonny 為程式開發工具,並以 MicroPython 程式碼來控制 ESP8266 開發板(Wemos D1 Mini)與延伸附加的硬體裝置。 所有HTTP回應的第一行都是狀態行,依次是當前HTTP版本號,3位數字組成的狀態代碼,以及描述狀態的短語,彼此由空格分隔。
狀態代碼的第一個數字代表當前回應的類型:
- 1xx訊息——請求已被伺服器接收,繼續處理
- 2xx成功——請求已成功被伺服器接收、理解、並接受
- 3xx重新導向——需要後續操作才能完成這一請求
- 4xx請求錯誤——請求含有詞法錯誤或者無法被執行
- 5xx伺服器錯誤——伺服器在處理某個正確請求時發生錯誤
httpbin.org網站提供HTTP請求/回應的測試服務,類似Echo服務,可以將我們送出的HTTP請求,自動以JSON格式回應送出的請求資料,HTTP方法支援GET和POST等,其網址是:http://httpbin.org,如下圖所示:
輸入http://httpbin.org/user-agent 使用者代理,可取得送出HTTP請求的客戶端資料。
import urequests送出簡單的GET請求。我們準備送出Google網站的GET請求,URL網址:http://www.google.com,如下所示:
import urequests r = urequests.get("http://www.google.com") print(r.status_code)送出擁有參數的GET請求:
在URL網址可以傳遞參數字串,參數是位在「?」問號之後,如果參數不只一個,請使用「&」符號分隔:
http://www.company.com?para1=value1¶2=value2上述URL網址傳遞參數para1和para2,其值分別為「=」等號後的value1和value2。 我們準備送出http://httpbin.org/get(HTTP請求/回應的測試網站)的GET請求,和加上2個參數,如下所示:
import urequests r = urequests.get("http://httpbin.org/get?name=justin&score=95") print(r.text)送出簡單的POST請求:
urequests套件是使用get()函數送出GET請求,同理,POST請求是使用post()函數,POST請求就是HTML表單送回,如同URL參數,我們需要送出表單欄位的輸入資料。
我們準備使用post()函數送出http://httpbin.org/post的POST請求,送出的資料和上一範例的參數相同,如下所示:
import urequests post_data = '{"name": "justin", "score": 95}' r = urequests.post("http://httpbin.org/post", data=post_data) print(r.text)
import network import urequests SSID = "WiFi名稱" # WiFi名稱 PASSWORD = "WiFi密碼" # WiFi密碼 def connect_wifi(ssid, passwd): sta = network.WLAN(network.STA_IF) sta.active(True) if not sta.isconnected(): print("連線中... \n") sta.connect(ssid, passwd) while not sta.isconnected(): pass print("連線成功... \n") connect_wifi(SSID, PASSWORD) #GET請求帶參數 print("GET請求帶參數...") r = urequests.get("http://httpbin.org/get?X=25&Y=20") if r.status_code == 200: #請求成功 print(r.encoding) print(r.text) #POST請求帶參數 print("POST請求帶參數...") data = '{ "X":15, "Y":22 }' # JSON資料的字串 r = urequests.post("http://httpbin.org/post", data=data) if r.status_code == 200: #請求成功 print(r.encoding) print(r.text)