閑言碎語
好久沒發(fā)文章了捶牢,因?yàn)楹孟衲苣脕硭恼碌哪K都用完了。后來有簡友提到http模塊巍耗,翻了先前的文章發(fā)現(xiàn)居然把http模塊忘記了秋麸,囧。
另外芍锦,需要說的是竹勉,這個(gè)模塊還涉及到HTTP的一些知識點(diǎn),但是本人也不是特別了解娄琉。有些地方可能說的不是特別準(zhǔn)確次乓。本文還是針對模塊自身如何使用來說。
同時(shí)文檔中提到了孽水,由于內(nèi)存限制票腰,如果訪問一些大文件頁面,將會failed女气。另外杏慰,也不能同時(shí)發(fā)起請求。所以,我個(gè)人覺得缘滥,這個(gè)模塊比較合適用在訪問服務(wù)端的數(shù)據(jù)API轰胁。
模塊函數(shù)
模塊的函數(shù)很少,就只有5個(gè)朝扼。一起來看一下~
|序號|函數(shù)名|參數(shù)|返回值|
|:--|:--:|:---:|:--:|--:|
|1|http.delete()|url, headers, body, callback|nil|
|2|http.get()|url, headers, callback|nil|
|3|http.post()|url, headers, body, callback|nil|
|4|http.put()|url, headers, body, callback|nil|
|5|http.request()|url, method, headers, body, callback|nil|
這幾個(gè)函數(shù)的參數(shù)都差不多赃阀,同時(shí)返回值都為nil。因?yàn)檎埱蟮慕Y(jié)果是通過回調(diào)的形式來進(jìn)行的擎颖¢凰梗回調(diào)函數(shù)接收三個(gè)參數(shù),分別是status_code搂捧、body驮俗、headers(似乎沒有這個(gè)參數(shù))。前4個(gè)函數(shù)對應(yīng)了一種http(s)請求允跑。最后一個(gè)則可以變換成任何一種http(s)請求王凑。
url表示請求地址的字符串,需要以http或者h(yuǎn)ttps開頭吮蛹,比如http://www.reibang.com 荤崇。
headers表示請求頭,可以是自定義的頭潮针,也可以是重寫標(biāo)準(zhǔn)的頭术荤。當(dāng)參數(shù)為nil的時(shí)候,傳入默認(rèn)的頭每篷,不同請求瓣戚,默認(rèn)值不同。get請求的默認(rèn)頭焦读,格式如下:
host: '192.168.199.202:3000',
connection: 'close',
'user-agent': 'ESP8266'
}```
connection 這個(gè)只能是close子库!重寫的時(shí)候別寫成其他的。
body矗晃,要發(fā)送出去的數(shù)據(jù)放在這個(gè)參數(shù)中仑嗅。
關(guān)于前4個(gè)請求是什么意思,我一陣胡亂百度后张症,大概可以這樣用仓技。GET請求用來請求服務(wù)器上的數(shù)據(jù)。POST請求則是用來請求修改服務(wù)器上的某個(gè)數(shù)據(jù)俗他。PUT請求用來增加數(shù)據(jù)脖捻。DELETE請求則是刪除某個(gè)數(shù)據(jù)。但是兆衅,通常使用前兩個(gè)來進(jìn)行增刪改查地沮。
## 實(shí)踐一下
這里直接拷貝文檔中的幾個(gè)例子嗜浮,來看看這5個(gè)函數(shù)有什么效果。首先是GET摩疑,
http.get("http://httpbin.org/ip", nil, function(code, data)
if (code < 0) then
print("HTTP request failed")
else
print(code, data)
end
end)
這個(gè)例子里危融,回調(diào)函數(shù)的data傳入了一個(gè)帶ip地址的json。也就是通過GET請求未荒,服務(wù)器返回一個(gè)ip數(shù)據(jù)专挪。
接著看看POST請求及志。這里例子里片排,重寫了請求頭。注意速侈,請求頭需要用\r\n來做換行率寡。至于,請求頭都有些什么參數(shù)倚搬,還請自行百度~
http.post('http://httpbin.org/post',
'Content-Type: application/json\r\n',
'{"hello":"world"}',
function(code, data)
if (code < 0) then
print("HTTP request failed")
else
print(code, data)
end
end)
再來看看DELETE和PUT冶共,直接貼代碼好了
http.delete('http://httpbin.org/delete',
"",
"",
function(code, data)
if (code < 0) then
print("HTTP request failed")
else
print(code, data)
end
end)
http.put('http://httpbin.org/put',
'Content-Type: text/plain\r\n',
'Hello!\nStay a while, and listen...\n',
function(code, data)
if (code < 0) then
print("HTTP request failed")
else
print(code, data)
end
end)
用法都是大同小異的。最后來看一下每界,request這個(gè)函數(shù)捅僵。可以用來執(zhí)行一個(gè)自定義的http請求或者是任何一個(gè)http中已有的請求眨层,比如HEAD庙楚,OPTIONS。這里來看一下如何使用request來發(fā)起一個(gè)GET請求趴樱。
http.request("http://httpbin.org/ip", "GET", "", "",
function(code, data)
if (code < 0) then
print("HTTP request failed")
else
print(code, data)
end
end)
很簡單馒闷,第二個(gè)參數(shù)傳入GET方法的字符串即可。這時(shí)候request就相當(dāng)于**.get**這個(gè)函數(shù)了叁征。
## 多說兩句
上面的例子離實(shí)際應(yīng)用還是比較遠(yuǎn)纳账,后面如果有應(yīng)用再做補(bǔ)充。個(gè)人覺得捺疼,應(yīng)用的重點(diǎn)還是在于GET和PUST疏虫,用來想服務(wù)器請求某個(gè)數(shù)據(jù)或者向服務(wù)器推送某個(gè)數(shù)據(jù),比如ADC讀到的溫度值之類的啤呼。
如果有簡友對這個(gè)模塊了解的話卧秘,請別忘記留言分享。
> 簡書評論不能貼圖, 如有需要可以到我的GitHub上提[issues](https://github.com/hanfengcan/nodemcu-just4fun/issues)