ESP32 / ESP8266 MicroPython教程:HTTP GET请求-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5551|回复: 1

ESP32 / ESP8266 MicroPython教程:HTTP GET请求

[复制链接]
发表于 2018-12-14 15:25 | 显示全部楼层 |阅读模式
本帖最后由 dfrobot 于 2018-12-14 15:29 编辑

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模块,该模块包含本教程所需的所有函数。
[mw_shl_code=applescript,true]1   import urequests[/mw_shl_code]

接下来,为了执行实际的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类的对象。
[mw_shl_code=applescript,true]1   response = urequests.get('http://jsonplaceholder.typicode.com/albums/1')
2   print(type(response))
[/mw_shl_code]

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


现在,要访问HTTP请求响应的实际内容,我们只需访问其text属性,如下所示。
[mw_shl_code=applescript,true]1    print(response.text)
2    print(type(response.text))[/mw_shl_code] 此命令的预期输出如图3所示。

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


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

[mw_shl_code=applescript,true]1   parsed = response.json()
2   print(type(parsed))[/mw_shl_code]

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

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

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

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

[mw_shl_code=applescript,true]1   V print(parsed["userId"])
2   print(parsed["id"])
3   print(parsed["title"])[/mw_shl_code]

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

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

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


[mw_shl_code=applescript,true]1   print(response.content)
2   print(type(response.content))[/mw_shl_code]




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


最后,我们还要获取状态代码和该代码的原因文本。为此,我们将使用status_codereason属性,如以下代码所示。[mw_shl_code=applescript,true]1  print(response.status_code)
2  print(response.reason)[/mw_shl_code]

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


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


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







发表于 2020-6-5 20:31 | 显示全部楼层
如何设置 Cookie
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-1 05:51 , Processed in 0.113062 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表