开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第一阶段:Lua 获取 Get 与 Post 请求数据】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/669/detail/11607
Lua 获取 Get 与 Post 请求数据
内容介绍
一. 获取 uri 参数
二.总结
目前为止,openresty 里面的 index 和 lua 在前面已经集成完毕,只需要在 lua 的脚本当中写数据采集的代码就可以了,那么应该如何采集数据呢?
用户在查询的时候都要通过一个 web 界面查询,web 界面走的协议是 HTTP协议。HTTP 协议有采集的数据在里面传输,是通过 HTTP 的请求采集过来的。 HTTP 的请求数据有 get 方式和 post 方式。
一. 获取 uri 参数
获取一个 uri 有两个方法:
ngx.req.get_uri_args、ngx.req.get_post_args,二者主要的区别是参数来源有区别
代 table 元素的 (pairs),迭代数组元素的 (ipairs )
1.首先看 get 方式:
--获取 get 请求参数 |
Local arg=ngx.req.get _uri_ args() |
for k,v in pairs(arg) do |
ngx.say("[GET ] key:",k, " v:", v) |
ngx.say("<br>") |
end |
用灰色部分就能够获取到前端用户请求的数据,请求的方式以及数据的一些参数,然后做接收,前面 local 定义局部,然后把相应的结果做 for 循环,然后输出。
刚刚配置好的文件在 test10 里:
前面写好的把他注释掉。
写完之后保存,为了让它生效,虽然没有修改配置文件,但是脚本修改了,所以需要重启 nginx。
重启没有报错,那么接下来刷新一下界面,界面是空的。
原因是没有给参数,
输入就可以了:
以上就是通过 lua 脚本的方式实现了一个 Nginx 的 get 方式请求的数据的获取参数,然后做 for 循环的输出,然后输出 key。
2.下面来看 post 方式:
--获取 post 请求时 请求参数 |
ngx. req.read_body()--解析 body 参数之前一定要先读取 body |
local arg=ngx.req.get_post_args() |
for k,v in pairs(arg) do |
ngx.say("[POST] key:",k, " v:", v) |
ngx.say("<br>") |
end |
同样先来写一下代码
保存,重启 nginx
刷新界面,看一下效果:
我们需要在获取 post 数据前先要解析数据啊,怎么解析呢?
在这执行之前输入 ngx. req.read_body():
保存,退出。
再重启 nginx,界面是这样的:
方法由 get 改成 post:
请求主题改成 name=LISI
点击发送:
二.总结
目标:掌握 Lua 获取 http 请求参数的用法
获取 url 的请求参数
get 方式的请求参数:
ngx.reg.get_uri_args(),返回值是数组,需要遍历 post 方式的请求参数:
(1)、解析 body:ngx.reqread_body()
(2)、获取: ngx.reqget_post_args()