查看: 310|回复: 1

[基础教程] ESP32 Picoweb教程:获取请求的HTTP方法

[复制链接]

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

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

[AppleScript] 纯文本查看 复制代码
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方法。在此示例中,我们将使用索引路由。

[AppleScript] 纯文本查看 复制代码
@app.route("/") 

def index(req, resp): 

#Handling function code

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

[AppleScript] 纯文本查看 复制代码
method = req.method 
print("Method was:" + method)

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

[AppleScript] 纯文本查看 复制代码
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。脚本的完整代码如下所示。

[AppleScript] 纯文本查看 复制代码
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的输出结果,它显示了我们在返回代码中定义的内容。

1esp32-picoweb-http-get-method-allowed-output.png
图1 - 通过Web浏览器对ESP32 Picoweb app执行HTTP GET请求的输出结果


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

2esp32-picoweb-http-get-method-command-line-output.png
图2 - 响应HTTP GET请求的路由处理函数的输出结果


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


3postman-sending-http-post-request-to-picoweb-esp32-app.png
图3 - 通过Postman执行HTTP POST请求的输出结果

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

4esp32-picoweb-http-post-request-received.png
图4 - 路由处理函数对一个HTTP POST请求的输出结果


注:本文作者是Nuno Santos,他是一位和蔼可亲的电子和计算机工程师,住在葡萄牙里斯本 (Lisbon)
他写了很多有关ESP32ESP8266的有用的教程和项目。

查看更多ESP32/ESP8266教程和项目,请点击 : ESP32教程汇总贴
英文版教程 ESP32 tutorial

gada888  版主

发表于 2019-1-14 18:56:37

不错不错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail