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)






沒有留言:
張貼留言