介绍 本 esp32 picoweb 教程的目的是解释如何从执行给 micropython picoweb 应用程序的请求中获取 http 方法。
通过本esp32 模块教程所显示的测试是使用集成在esp32 开发板中的 DFRobot 的 esp-wroom-32 设备执行的。该代码是在 upycaft 上开发的。您可以在前面的帖子中检查如何使用 upycaft:ESP32 MicroPython教程:uPyCraft IDE入门。
代码 像往常一样,我们将首先导入所需的模块并将ESP32连接到WiFi网络,从而在测试时可以从Web浏览器对其进行访问。为简单起见,我在此处明文显示了WiFi连接代码,这段代码可以很容易地封装在模块内的函数中。
[mw_shl_code=applescript,true]import picoweb
import network
ssid = "yourNetworkName"
password = "yourPassword"
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(ssid, password)
while station.isconnected() == False:
pass
ip = station.ifconfig()[/mw_shl_code]
在连接WiFi之后,我们将创建一个Picoweb app实例,并声明一条路由,通过这条路由获取一个请求(request)并检查HTTP方法。在此示例中,我们将使用索引路由。
[mw_shl_code=applescript,true]@app.route("/")
def index(req, resp):
#Handling function code[/mw_shl_code]
请注意,先前声明的处理函数有两个参数,这两个参数由系统框架自动赋值。正如我们在之前的教程中看到的那样,第二个参数是一个数据流写入器(StreamWriter),我们用它将响应发送回客户端。 第一个参数我们在之前还没使用过,它是一个HTTPRequest类对象,可提供关于所接收的请求(request)的一些信息。 因此,为了获得所接收的请求(request)的HTTP方法,我们只需访问HTTPRequest类对象的方法属性即可。注意,当我们指定路由处理函数的参数时,我们调用了对象req。
[mw_shl_code=applescript,true]method = req.method
print("Method was:" + method)[/mw_shl_code]
现在,我们已经知道了这个方法,接下来我们将在路由上构建一个简单的逻辑,即,当方法为POST时返回“不允许的HTTP方法”错误,否则返回一些测试信息。 关于如何返回HTTP错误的信息,请查看之前的文章。“不允许的方法”对应的错误代码为405[1]。
[mw_shl_code=applescript,true]if method == "POST":
yield from picoweb.http_error(resp, "405")
else:
yield from picoweb.start_response(resp)
yield from resp.awrite("HTTP method was allowed")[/mw_shl_code]
最后,我们将调用run方法启动这个app。脚本的完整代码如下所示。
[mw_shl_code=applescript,true]import picoweb
import network
ssid = "yourNetworkName"
password = "yourPassword"
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(ssid, password)
while station.isconnected() == False:
pass
ip = station.ifconfig()
app = picoweb.WebApp("myApp")
@app.route("/")
def index(req, resp):
method = req.method
print("Method was:" + method)
if method == "POST":
yield from picoweb.http_error(resp, "405")
else:
yield from picoweb.start_response(resp)
yield from resp.awrite("HTTP method was allowed")
app.run(debug=True, host =ip[0])[/mw_shl_code]
测试代码 为了测试代码,只需将脚本上传到ESP32开发板上并运行即可。在执行时,URL应该打印到控制台上。为了测试GET方法,只需复制此URL并将其粘贴到Web浏览器上即可。您将看到类似于图1的输出结果,它显示了我们在返回代码中定义的内容。
图1 - 通过Web浏览器对ESP32 Picoweb app执行HTTP GET请求的输出结果
对于此请求,如果我们检查MicroPython提示符中的输出,会发现它显示了正确的方法,如图2所示。
图2 - 响应HTTP GET请求的路由处理函数的输出结果
为了测试发送一个HTTP POST请求,我们可以使用像Postman这样的工具,它可以使发送HTTP请求的过程非常简单。您可以在此处查看有关如何使用Postman发送HTTP POST请求的视频简介。 图3显示了使用此工具发送POST请求的输出结果。可以看出,正如预期那样,返回的HTTP代码是405。
图3 - 通过Postman执行HTTP POST请求的输出结果
最后,如果我们回到MicroPython控制台,会发现控制台上也显示了正确的HTTP方法,如图4所示。
图4 - 路由处理函数对一个HTTP POST请求的输出结果
注:本文作者是Nuno Santos,他是一位和蔼可亲的电子和计算机工程师,住在葡萄牙里斯本 (Lisbon)。 他写了很多有关ESP32、ESP8266的有用的教程和项目。
查看更多ESP32/ESP8266教程和项目,请点击 : ESP32教程汇总贴
|