使用正则表达式从服务器回复中删除 HTML header
2022-1-30 13:23:18
收藏:0
阅读:288
评论:1
我有一个带有集成 GSM 单元的 ESP32 T-CALL 并使用 这个 作为 Arduino IDE 的基础。
我的代码进行了一个服务器调用并处理结果。 这段代码从缓冲区中读取并将其输出到一个字符串中。 它使用手动生成的 POST 标头,串行发送。 但是,我需要删除 HTTP 标头,仅留下 JSON。
while (client.connected() && millis() - timeout < 10000L) {
// Print available data (HTTP response from server)
while (client.available()) {
char c = client.read();
returnString += c;
timeout = millis();
}
}
输出带有完整的 header,如下所示:
HTTP/1.1 200 OK
Content-Type: application/json
Server: Microsoft-IIS/10.0
X-Powered-By: PHP/8.0.0
X-Powered-By: ASP.NET
Date: Tue, 25 Jan 2022 00:12:31 GMT
Connection: close
Content-Length: 23
{"status:":"code6"}
我使用了 <regexp.h> 库 by Nick Gammon 和这里的 Lua-reference 以过滤掉左大括号之外的所有内容 - 但是,我似乎无法做到。 我想,像这样:
char result = ms.Match ("{(%x+)"); //查找第一个大括号并仅包括右侧的内容。
可惜,使用这个正则表达式,找不到匹配项。 我还尝试在 \r\n\r\n 处分割,在这里使用 getValue-function 但无法接受双行换行符。
如何使用正则表达式删除标头的任何想法?
原文链接 https://stackoverflow.com/questions/70910855
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
- 如何创建一个 lua 脚本以针对特定键为 fluentbit 进行限流
- 如何在Lua中将变量从Lua推送到C ++
这不是一个关于如何使用正则表达式的直接答案,但是如果你想跳过头部并获取有效载荷,除了使用我在评论中提到的正则表达式或httpclient库之外,没有使用任何库也不难实现此目的。
要跳过头部并获取有效载荷,您需要修改代码以查找头部的结尾。
// 跳过 http 头部 while (client.connected()) { String line = client.readStringUntil('\n'); if (line == '\r') break; //如果line只包含" \r",那么它就是头部的末尾 } } // 获取有效载荷 String payload; while (client.available()) { payload = client.readStringUntil('\n'); }
然后,您可以使用JSON库从JSON对象中提取数据。或者,对于您所显示的简单JSON对象,您可以不使用库进行操作。
payload.trim(); // 去除结尾的 "\r\n" payload.replace("status:", ""); // 用 "" 替换 "status:" payload.replace("\"", ""); // 去除所有 "\"" payload.trim(); Serial.println(payload);
这将打印出您JSON对象中
code6
的值。