8198| 1
|
[ESP32系列教程] ESP32 MicroPython教程:开发一个简单的URL查询字符串解析器 |
介绍 本文的目的是解释如何使用 micropython 开发一个非常简单的 url 查询字符串解析器。解释查询字符串是什么超出了本文的范围, 但您可以在这里阅读有关它的更多信息:https://en.wikipedia.org/wiki/Query_string。 我们的查询字符串解析器将非常简单, 因此我们将假定查询字符串具有良好的行为格式, 因此所有参数值对都由 "&" 字符分隔, 每个参数与其值之间用 "=" 分隔字符。我们还将假定每个参数始终具有相应的值。 通过本 esp32教程所显示的测试是使用DFRobot 的esp-wroom-32设备集成在fireebettle esp32 主板中进行的。使用的 IDE 是"upycaft",使用教程:ESP32 MicroPython教程:uPyCraft IDE入门。 代码 由于我们希望开发一个可重复使用的通用[url=]代码[/url]解决方案,因此我们将把代码封装在一个函数中。当然,这个函数会有一个输入变量,所以我们可以向其传递要处理的URL查询字符串。我们将这个函数命名为qs_parse。
在函数内部,我们将首先声明一个空字典,它可以很好地映射查询字符串的“参数 = 值”结构。参数名称将用作字典的key(键),因此,我们将能够通过其名称访问每个参数。您可以查看前面的教程了解有关字典的更多信息:ESP32 / ESP8266 MicroPython教程:如何使用字典。
如前所述,我们知道“参数-值”对之间可以用“&”分隔。因此,如果我们使用“&”字符作为分隔符,我们就可以隔离每个参数值对。 为此,我们可以使用字符串split方法(https://techtutorialsx.com/2017/09/29/esp32-esp8266-micropython-string-split-method/),将用作分隔符的字符串作为输入参数,并返回由分隔符分割的子字符串列表。分隔符不包含在结果中,因此,我们将得到一个干净的列表,在这个列表中,每个子字符串都对应着一个“参数-值”对。 请注意,由于split函数是一个字符串方法,所以我们在调用它时需要使用包含查询参数的字符串变量。在这个示例中,该字符串是qs_parse函数的输入参数,我们称之为qs。
由于我们要开发一个通用的解析函数,所以假设我们不知道查询中存在多少个参数。因此,我们将使用for …in循环对前面获取的列表元素进行逐个迭代处理。
在每次循环迭代中,元素变量将由每个“参数-值”对构成的字符串赋值,字符串格式为“参数=值”。我们已经知道,参数和值由“=”字符分隔,所以我们可以再次使用split函数,使用“=”字符作为分隔符进一步分割字符串。
由于我们采用的是逐对重复处理的方式,所以我们知道此操作的输出结果将始终是一个具有两个位置的列表。第一个位置是参数的名称(它是分隔符字符左侧的子字符串),第二个位置是其值(它是分隔符字符右侧的子字符串)。 考虑到这一点,我们只需将结果列表的第一个元素映射到字典的键(key),将第二个元素映射到字典的值(value)。请记住,MicroPython索引号是从零开始的,因此列表第一个和第二个元素的索引号分别为0和1。
在代码的最后,我们将返回字典,它存储在parameters变量中。
测试代码 若要测试代码,只需将其上传到ESP32上即可。在这个示例中,我使用了uPyCraft,它将创建一个后缀名为.py文件。 我将调用文件qs_parse(我对函数使用了相同的名称,但它可能有所不同),因此稍后我需要将其作为模块导入,以便能够使用已开发的函数。在上传之后,为了测试一切,我们可以使用以下代码。
就像快速分析一样,我们首先导入我们封装函数的模块。然后我们将声明一个匹配示例中URL查询字符串的字符串。最后,我们将调用模块的qs_parse函数(请记住,模块和函数具有相同的名称)并把结果打印出来。图1显示了输出结果。 图1 - 应用查询字符串解析器的输出结果 可以看出,输出的字典由与URL参数匹配的Key(键)和Value(值)组成。我们可以在随后使用字典函数来检查可用的Key(键)和Value(值)。 注:本文作者是Nuno Santos,他是一位和蔼可亲的电子和计算机工程师,住在葡萄牙里斯本 (Lisbon)。 他写了很多有关ESP32、ESP8266的有用的教程和项目。 查看更多ESP32/ESP8266教程和项目,请点击 : ESP32教程汇总 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed