闲言碎语
好久没发文章了,因为好像能拿来水文章的模块都用完了。后来有简友提到http模块,翻了先前的文章发现居然把http模块忘记了,囧。
另外,需要说的是,这个模块还涉及到HTTP的一些知识点,但是本人也不是特别了解。有些地方可能说的不是特别准确。本文还是针对模块自身如何使用来说。
同时文档中提到了,由于内存限制,如果访问一些大文件页面,将会failed。另外,也不能同时发起请求。所以,我个人觉得,这个模块比较合适用在访问服务端的数据API。
模块函数
模块的函数很少,就只有5个。一起来看一下~
|序号|函数名|参数|返回值|
|:--|:--:|:---:|:--:|--:|
|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|
这几个函数的参数都差不多,同时返回值都为nil。因为请求的结果是通过回调的形式来进行的。回调函数接收三个参数,分别是status_code、body、headers(似乎没有这个参数)。前4个函数对应了一种http(s)请求。最后一个则可以变换成任何一种http(s)请求。
url表示请求地址的字符串,需要以http或者https开头,比如http://www.jianshu.com 。
headers表示请求头,可以是自定义的头,也可以是重写标准的头。当参数为nil的时候,传入默认的头,不同请求,默认值不同。get请求的默认头,格式如下:
host: '192.168.199.202:3000',
connection: 'close',
'user-agent': 'ESP8266'
}```
connection 这个只能是close!重写的时候别写成其他的。
body,要发送出去的数据放在这个参数中。
关于前4个请求是什么意思,我一阵胡乱百度后,大概可以这样用。GET请求用来请求服务器上的数据。POST请求则是用来请求修改服务器上的某个数据。PUT请求用来增加数据。DELETE请求则是删除某个数据。但是,通常使用前两个来进行增删改查。
## 实践一下
这里直接拷贝文档中的几个例子,来看看这5个函数有什么效果。首先是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)
这个例子里,回调函数的data传入了一个带ip地址的json。也就是通过GET请求,服务器返回一个ip数据。
接着看看POST请求。这里例子里,重写了请求头。注意,请求头需要用\r\n来做换行。至于,请求头都有些什么参数,还请自行百度~
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这个函数。可以用来执行一个自定义的http请求或者是任何一个http中已有的请求,比如HEAD,OPTIONS。这里来看一下如何使用request来发起一个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)
很简单,第二个参数传入GET方法的字符串即可。这时候request就相当于**.get**这个函数了。
## 多说两句
上面的例子离实际应用还是比较远,后面如果有应用再做补充。个人觉得,应用的重点还是在于GET和PUST,用来想服务器请求某个数据或者向服务器推送某个数据,比如ADC读到的温度值之类的。
如果有简友对这个模块了解的话,请别忘记留言分享。
> 简书评论不能贴图, 如有需要可以到我的GitHub上提[issues](https://github.com/hanfengcan/nodemcu-just4fun/issues)