使用nodemcu没有可用的POST参数
2016-2-13 18:17:54
收藏:0
阅读:53
评论:2
我一直在尝试创建一个能够处理GET和POST方法的小型Web服务器。
由于某种原因,似乎无法解析POST参数,因为每当我打印整个请求字符串时,它们根本不在那里:
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on("receive", function(client,request)
local buf = ""
local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
if(method == nil)then
_, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
end
local _GET = {}
if (vars ~= nil)then
for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
_GET[k] = v
buf = buf , v
end
end
if method == "POST" then
buf = "POST DETECTED"
print("########")
print(request)
print("********")
end
client:send("HTTP/1.1 200 OK\n")
client:send("Server: NodeMCU 0.1\n")
client:send("Content-Length: " .. string.len(buf) .. "\n\n")
client:send(buf);
client:close();
collectgarbage();
end)
end)
对于像以下示例中的简单curl调用:
curl 10.0.130.12 -v -X POST -d "foo=bar"
我在NodeMCU侧看到的是:
#########
POST / HTTP/1.1
Host: 10.0.130.12
User-Agent: curl/7.45.0
Accept: */*
Content-Length: 7
Content-Type: application/x-www-form-urlencoded
*********
为什么我看不到POST参数?
点赞
用户316875
将POST数据读入的正确方式
一些浏览器会将HTTP头和POST数据封装在一个数据包中(例如Firefox),而另一些则会分开发送(例如Safari)。因此,你需要一直读取数据,直到你收到头部之后Content-Length指定的字节数(也就是\r\n\r\n)。
正如Marcel Stör所指出的那样,nodemcu-httpserver具有可用的POST方法,所以你可以将其作为示例或直接使用该项目。
2016-02-17 03:14:52
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【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中获取用户配置主目录的跨平台方法
我不确定为什么参数没有在输出中打印出来,因为
Content-Length: 7明确表示内容已按预期发送。如果您想使用 curl 查看 POST 数据,需要添加--trace-ascii -,这将在输出中显示类似以下内容:=> 发送数据,7 字节 (0x7) 0000: foo=bar要在脚本中处理它们,您需要处理请求主体;以下代码可能会给您要处理的参数:
local vars = string.match(request, "\r\n\r\n(.*)")。