查看: 344|回复: 0

ESP32 / ESP8266 MicroPython教程:HTTP GET请求

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

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

    [LV.3]偶尔看看II

    发表于 2019-4-4 11:06 | 显示全部楼层 |阅读模式
    MicroPython教程旨在阐释如何借助urequests模块用MicroPython执行HTTP GET请求。本教程在ESP8266ESP32MicroPython上均进行了测试。


    简介


    MicroPython教程旨在阐释如何借助urequests块用MicroPython执行HTTP GET请求。本教程在ESP32ESP8266MicroPython上均进行了测试。下文所示数据出自ESP32上的测试,但ESP8266的测试结果与之相差无几可以在这里https://github.com/micropython/micropython-lib/blob/master/urequests/urequests.py)访问库的源代码。

    重要提示:本文撰写之际,所用的MicroPython版本内含urequests模块。请注意,此情况或有变化,之后版本的默认配置可能不会包含该模块,你需要先进行手动安装。
    当然,为适用本教程,我们首先需要连接到WiFi网络,以便访问互联网。本教程将不再赘述如何连接WiFi网络。如果你想手动连接,请参阅这篇http://mc.dfrobot.com.cn/forum.php?mod=viewthread&tid=272122)详细指南。

    我们将通过连接MicroPython提示符并一次发送一个命令来运行代码。如果你愿意的话,可以在脚本中编写命令并从你的计算机运行该脚本,如此处翻译中所述。另一个选择是将脚本上传到MicroPython的文件系统并从提示符运行该脚本,如此处https://www.dfrobot.com/index.php?route=DFblog/blogs所述。

    我将使用Putty连接到提示符,但你可以使用其他能够建立串行连接的软件。如果你尚未在ESP32上配置MicroPython,请参阅这篇http://mc.dfrobot.com.cn/forum.php?mod=viewthread&tid=271932)之前的帖子。如果你使用的是ESP8266,请参阅此帖https://techtutorialsx.com/2017/05/03/esp8266-micropython-support/)


    代码


    首先,连接到WiFi网络后,我们将导入urequests模块,该模块包含本教程所需的所有函数。
    1   import urequests

    接下来,为了执行实际的HTTP GET请求,我们只需调用urequests模块的get函,并将请求目标的URL作为输入值传递。此处将用到一个假的在线REST API的网站,我曾在多个教程中使用过这个网站。 我们要通过HTTP GET请求访问的网站URLhttp://jsonplaceholder.typicode.com/albums/1,你可以通过在web浏览器上访问该网站来查看预期结果。访问该网站时,你应该会得到类似于图1的内容,这是虚拟相册对象的JSON结构。


    Figure 1 – Expected output of a HTTP GET request..png
    1 - HTTP GET请求的预期输出结果

    以下代码用于执行上述来自MicroPythonGET请求。调用get函数将返回一个Response类的对象。
    1   response = urequests.get('http://jsonplaceholder.typicode.com/albums/1')
    2   print(type(response))

    如图2所示,返回的对象确实属于Response类。
    Figure 2 – Class of the object returned by the call to the get method..png
    2 - 调用get方法返回的对象类。


    现在,要访问HTTP请求响应的实际内容,我们只需访问其text属性,如下所示。
    1    print(response.text)
    2    print(type(response.text))


    此命令的预期输出如图3所示。

    Figure 3 – Printing the response of the HTTP GET request..png
    3 - 打印HTTP GET请求的响应。


    请注意,此属性会返回包含内容的字符串。然而,正如我们所看到的,请求的响应是以JSON格式返回的。因此,如果愿意的话,我们可以访问json属性,该属性会返回包含已解析内容的字典。

    1   parsed = response.json()
    2   print(type(parsed))

    这些命令的结果如图4所示。这证实了我们的结果确实是一个Python字典。

    Figure 4 – Obtaining the JSON content of the response parsed..png

    4 - 获取响应的解析JSON内容。

    从库的源代码中可以看出,此属性借助ujson库来解析内容。你可以在之前的文章中了解更多有关ujson解析的信息。既然我们已经解析了对象,那么就可以通过字典对象上值的键来获取每个单独的JSON值。


    1   V print(parsed["userId"])
    2   print(parsed["id"])
    3   print(parsed["title"])


    获取JSON结构各个值的结果如图5所示。该结果与从text属性获得的JSON结构一致。


    Figure 5 – Accessing the values of the JSON structure via Python dictionary..png
    5 - 通过Python字典获取JSON结构的值。

    另一个检索请求响应内容的有趣方法是使用以字节为单位返回响应的content属性。


    1   print(response.content)
    2   print(type(response.content))




    请参见图6所示的命令结果。
    Figure 6 – Response of the HTTP GET request as bytes..png
    6 –HTTP GET请求的响应(以字节为单位)


    最后,我们还要获取状态代码和该代码的原因文本。为此,我们将使用status_codereason属性,如以下代码所示。



    1  print(response.status_code)
    2  print(response.reason)

    7展示了这些命令的结果。注意,结果包含一个代码200,其对应于HTTP中的OK代码。


    Figure 7 – Getting the HTTP status code and reason..png
    7 - 获取HTTP状态代码和原因。


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






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

    本版积分规则

    热门推荐

    [Arduino物联网开发实战2]数据反馈
    [Arduino物联网开发实战2]
    [md]上一篇:(https://www.arduino.cn/thread-83177-1-1.html) 除了控制设备外,blin
    OLED 128*64自制可达10000000个选项的菜单(已更新)
    OLED 128*64自制可达10000
    OLED 128*64自制可达10000000个选项的菜单 温馨提示: 建议占个楼再食用本帖子
    新手求帮助,别人给的一个工程,打开编译报错
    新手求帮助,别人给的一个
    别人给的一个esp8266的工程,编译时候显示缺失很多.h文件,我从github和管理库里面下
    RPG游戏 无人世界
    RPG游戏 无人世界
    操作:方向键移动,a键确认 b键打开符文菜单 游戏流程大约半小时 视频攻略:ht
    求求求你 救救孩子吧
    求求求你 救救孩子吧
    这个bug是什么问题
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表