查看: 308|回复: 0

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

[复制链接]
  • TA的每日心情

    2018-1-11 13:58
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2019-5-15 14:37 | 显示全部楼层 |阅读模式


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

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

    kittenblock中小学创客名师推荐的图形化编程软件

    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方法。在此示例中,我们将使用索引路由。

    kittenblock中小学创客名师推荐的图形化编程软件

    @app.route("/") 
    
    def index(req, resp): 
    
    #Handling function code

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

    kittenblock中小学创客名师推荐的图形化编程软件

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

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

    kittenblock中小学创客名师推荐的图形化编程软件

    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。脚本的完整代码如下所示。

    kittenblock中小学创客名师推荐的图形化编程软件

    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所示。

    图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)
    他写了很多有关ESP32ESP8266的有用的教程和项目。

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



    打赏作者鼓励一下!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    Arduino lcd屏幕亮了但是不显示字符
    Arduino lcd屏幕亮了但是
    Arduino的lcd屏亮了但是上面没有字符显示,串进去的滑动变阻器也旋过了,但是还是没有
    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    [限时福利]5分钟带你快速了解新一代开发板:M5STACK
    [限时福利]5分钟带你快速
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    【Arduino】108种传感器模块系列实验(98)---L298N电机驱动板
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    两个ESP8266通过云端实现远程数据交互
    两个ESP8266通过云端实现
    原理简述:利用发布订阅模式。一个ESP8266作为消息发布者,另一个ESP8266作为消息订阅
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表