合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
可以在Lua脚本中发送http请求,支持POST、GET、PUT、DELETE方法 使用httpOps模块,你可以不使用Redis、MQ等接收端,直接将数据发送到应用接口 # **示例** t_user表,数据如下: ![](https://img.kancloud.cn/b7/ae/b7aea55df3a0d071d67a930b1f497314_589x141.png) Lua脚本: ``` -- t_user_httpclient.lua local ops = require("scriptOps") --加载脚本操作模块 local json = require("json") -- 加载json模块 local httpclient = require("httpOps") --加载http操作模块 local row = ops.rawRow() --数据库当前变更的一行数据,table类型,key为列名称 local action = ops.rawAction() --当前数据库事件,包括:insert、updare、delete local _id = row["ID"] --获取ID列的值 local _userName = row["USER_NAME"] --获取USER_NAME列的值 if action == "insert" then -- 插入事件 -- http get请求,第一个参数为URL,类型为string;第二个参数为header参数,类型为table --local url = string.format("http://localhost:8080/users/%s", _userName) --local res = httpclient.get(url,{ -- Authorization="Basic OSdjJGRpbjpvcGVuIANlc2SdDE==" --}) --if(res~=nil) then -- http响应代码,如:200、401、403、500等 -- print(res.status_code) -- http响应内容,string类型 -- print(res.body) --else -- print("request fail") --end --http post请求,第一个参数为URL,类型为string;第二个参数为header参数,类型为table;第三个参数为post内容,类型为table local url = "http://localhost:8080/users" local _data = json.encode(row) -- 将result转为json local res = httpclient.post(url,{ Authorization="Basic OSdjJGRpbjpvcGVuIANlc2SdDE==" },{ data=_data, }) if(res~=nil) then -- http响应代码,如:200、401、403、500等 print(res.status_code) -- http响应内容,string类型 print(res.body) else print("post request fail") end end if action == "update" then -- 更新事件 --http put请求,第一个参数为URL,类型为string;第二个参数为header参数,类型为table;第三个参数为put内容,类型为table local url = "http://localhost:8080/users" local _data = json.encode(row) -- 将result转为json local res = httpclient.put(url,{ Authorization="Basic OSdjJGRpbjpvcGVuIANlc2SdDE==" },{ data=_data, }) if(res~=nil) then -- http响应代码,如:200、401、403、500等 print(res.status_code) -- http响应内容,string类型 print(res.body) else print("put request fail") end end if action == "delete" then -- 删除事件 -- http delete请求,第一个参数为URL,类型为string;第二个参数为header参数,类型为table local url = string.format("http://localhost:8080/users/%s", _id) local res = httpclient.delete(url,{ Authorization="Basic OSdjJGRpbjpvcGVuIANlc2SdDE==" }) if(res~=nil) then -- http响应代码,如:200、401、403、500等 print(res.status_code) -- http响应内容,string类型 print(res.body) else print("delete request fail") end end ``` 引入脚本: ``` #目标类型 target: script # 支持redis、mongodb、elasticsearch、rocketmq、kafka、rabbitmq、script #规则配置 rule: - schema: eseap #数据库名称 table: t_user #表名称 #order_by_column: id #排序字段,存量数据同步时不能为空 lua_file_path: lua/t_user_httpclient.lua #lua脚本文件 #lua_script: #lua 脚本 ``` insert事件,发送到后台的数据如下: ![](https://img.kancloud.cn/48/5e/485e8ffe23c747848c7a57b3e7b1281d_1431x101.jpg) update事件,发送到后台的数据如下: ![](https://img.kancloud.cn/87/8e/878e0ba9b28561c9ada2f78eabe49c27_1444x102.jpg) delete事件,发送到后台的数据如下: ![](https://img.kancloud.cn/94/a9/94a9f8e2addb190751be676039ab5be6_1452x100.jpg) # **httpOps模块** 提供的方法如下: 1、get(url,headers) 发送get请求;url为请求地址;headers为请求头参数,table类型 2、delete(url,headers) 发送delete请求;url为请求地址;headers为请求头参数,table类型 3、post(url,headers,formItems) 发送post请求;url为请求地址;headers为请求头参数,table类型;formItems为表单数据,table类型 4、put(url,headers,formItems) 发送put请求;url为请求地址;headers为请求头参数,table类型;formItems为表单数据,table类型 上面4个方法的返回值为一个table类型的结果,元素"status_code"为http响应状态,Number类型(如:200、401、403、500等);元素body为http响应内容,string类型 # **后台测试代码** ## **golang** ``` package main import ( "fmt" "github.com/gin-gonic/gin" "net/http" ) func main() { r := gin.Default() r.GET("/users/:name", func(c *gin.Context) { name := c.Param("name") c.String(http.StatusOK, "Get: %s", name) }) r.POST("/users", func(c *gin.Context) { authorization:=c.GetHeader("Authorization") data := c.PostForm("data") fmt.Printf("method: post \n") fmt.Printf("authorization: %s \n", authorization) fmt.Printf("data: %s \n",data) c.String(http.StatusOK, "ok") }) r.PUT("/users", func(c *gin.Context) { authorization:=c.GetHeader("Authorization") data := c.PostForm("data") fmt.Printf("method: put \n") fmt.Printf("authorization: %s \n", authorization) fmt.Printf("data: %s \n",data) c.String(http.StatusOK, "ok") }) r.DELETE("/users/:id", func(c *gin.Context) { id := c.Param("id") authorization:=c.GetHeader("Authorization") fmt.Printf("method: delete \n") fmt.Printf("authorization: %s \n", authorization) fmt.Printf("id: %s \n",id) c.String(http.StatusOK, "ok") }) r.Run() // listen and serve on 0.0.0.0:8080 } ``` ## **java(spring mvc)** ``` @RestController @RequestMapping("/users") public class LuaHttpClientTest { @PostMapping public String insert(@RequestParam(name = "data") String data, @RequestHeader(value="Authorization") String authorization) { System.out.println("method: post"); System.out.println("authorization: "+authorization); System.out.println("data: "+data); return "ok"; } @PutMapping public String update(@RequestParam(name = "data") String data, @RequestHeader(value="Authorization") String authorization) { System.out.println("method: put"); System.out.println("authorization: "+authorization); System.out.println("data: "+data); return "ok"; } @DeleteMapping("/{id}") public String delete(@PathVariable(name = "id") String id, @RequestHeader(value="Authorization") String authorization) { System.out.println("method: delete"); System.out.println("authorization: "+authorization); System.out.println("id: "+id); return "ok"; } } ```