ESP32 Picoweb教程:获取请求的HTTP方法

上一篇:ESP32 Arduino教程:FreeRTOS队列性能测试

介绍

本 esp32 picoweb 教程的目的是解释如何从执行给 micropython picoweb 应用程序的请求中获取 http 方法。
通过本esp32 模块教程所显示的测试是使用集成在esp32 开发板中的 DFRobot 的 esp-wroom-32 设备执行的。该代码是在 upycaft 上开发的。您可以在前面的帖子中检查如何使用 upycaft:ESP32 MicroPython教程:uPyCraft IDE入门。

代码

像往常一样,我们将首先导入所需的模块并将ESP32连接到WiFi网络,从而在测试时可以从Web浏览器对其进行访问。为简单起见,我在此处明文显示了WiFi连接代码,这段代码可以很容易地封装在模块内的函数中。

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()

在连接WiFi之后,我们将创建一个Picoweb app实例,并声明一条路由,通过这条路由获取一个请求(request)并检查HTTP方法。在此示例中,我们将使用索引路由。

@app.route("/") 

def index(req, resp): 

#Handling function code

请注意,先前声明的处理函数有两个参数,这两个参数由系统框架自动赋值。正如我们在之前的教程中看到的那样,第二个参数是一个数据流写入器(StreamWriter),我们用它将响应发送回客户端。
第一个参数我们在之前还没使用过,它是一个HTTPRequest类对象,可提供关于所接收的请求(request)的一些信息。
因此,为了获得所接收的请求(request)的HTTP方法,我们只需访问HTTPRequest类对象的方法属性即可。注意,当我们指定路由处理函数的参数时,我们调用了对象req。

method = req.method 
print("Method was:" + method)

现在,我们已经知道了这个方法,接下来我们将在路由上构建一个简单的逻辑,即,当方法为POST时返回“不允许的HTTP方法”错误,否则返回一些测试信息。
关于如何返回HTTP错误的信息,请查看之前的文章。“不允许的方法”对应的错误代码为405[1]。

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")

最后,我们将调用run方法启动这个app。脚本的完整代码如下所示。

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])

测试代码

为了测试代码,只需将脚本上传到ESP32开发板上并运行即可。在执行时,URL应该打印到控制台上。为了测试GET方法,只需复制此URL并将其粘贴到Web浏览器上即可。您将看到类似于图1的输出结果,它显示了我们在返回代码中定义的内容。

在这里插入图片描述

图1 - 通过Web浏览器对ESP32 Picoweb app执行HTTP GET请求的输出结果

对于此请求,如果我们检查MicroPython提示符中的输出,会发现它显示了正确的方法,如图2所示。

ESP32 Picoweb教程:获取请求的HTTP方法_第1张图片
图2 - 响应HTTP GET请求的路由处理函数的输出结果

为了测试发送一个HTTP POST请求,我们可以使用像Postman这样的工具,它可以使发送HTTP请求的过程非常简单。您可以在此处查看有关如何使用Postman发送HTTP POST请求的视频简介。
图3显示了使用此工具发送POST请求的输出结果。可以看出,正如预期那样,返回的HTTP代码是405。

ESP32 Picoweb教程:获取请求的HTTP方法_第2张图片

图3 - 通过Postman执行HTTP POST请求的输出结果

最后,如果我们回到MicroPython控制台,会发现控制台上也显示了正确的HTTP方法,如图4所示。

ESP32 Picoweb教程:获取请求的HTTP方法_第3张图片
图4 - 路由处理函数对一个HTTP POST请求的输出结果

注:本文作者是Nuno Santos,他是一位和蔼可亲的电子和计算机工程师,住在葡萄牙里斯本 (Lisbon)。
他写了200多篇有关ESP32、ESP8266的有用的教程和项目。涉及arduino、micropython、 Picoweb、Espruino、Bluetooth、RFID、IDF……等等非常广泛,说是最全的完全不为过。

精华教程:

ESP32 MicroPython教程:uPyCraft IDE入门
ESP32 MicroPython教程:解析JSON
ESP32 MicroPython教程:MicroPython支持
ESP32 MicroPython教程:连接Wi-Fi网络
ESP32 / ESP8266 MicroPython教程:自动连接WiFi
ESP32 / ESP8266 MicroPython教程:从文件系统运行脚本
ESP32 / ESP8266 MicroPython教程:HTTP GET请求
ESP32 Arduino教程:用于构建ESP32编译环境的Arduino IDE软件
ESP32 Arduino教程:FreeRTOS队列性能测试
ESP32 RFID教程:打印MFRC522固件版本
ESP32 Picoweb教程:获取请求的HTTP方法
……

还有更多教程: ESP32教程 合集

英文版 :ESP32 tutorial合集

你可能感兴趣的:(ESP32,picoweb)