OpenResty 中使用 ngx.location.capture 完成第三方接口请求
OpenResty Lua About 1,059 words方法介绍
OpenResty
自带方法,同步但非阻塞的Nginx子请求,模拟HTTP
但没有额外的HTTP/TCP
流量和IPC
调用。
文档地址:https://github.com/openresty/lua-nginx-module#ngxlocationcapture
特别注意
- 不能使用
location @name
配置方式; - 使用
internal
指令限制只能内部方法; body
参数只能使用string
(可结合cjson
完成application/json
请求);gzip
后的请求不能被Lua
正常解析,关闭转发header
,设置proxy_pass_request_headers
为off
;ngx.timer
中不能使用;
快速入门
此处只介绍作为HTTP
客户端请求第三方接口的情况,用于内部之请求的情况,请查阅官方文档。
Nginx配置
location = /api {
internal;
set_by_lua $target 'return ngx.ctx.target_uri';
proxy_pass_request_headers off;
proxy_pass $target;
}
GET请求
使用ngx.encode_args
对参数进行urlencode
local args = {
page = 1,
size = 20
}
local res = ngx.location.capture('/api', {
method = ngx.HTTP_GET,
ctx = {
target_uri = "http://127.0.0.1?" .. ngx.encode_args(args),
}
})
POST请求
application/json
示例
local req_param = json.encode({
postId = 304
})
local res = ngx.location.capture('/api', {
method = ngx.HTTP_POST,
body = req_param,
ctx = {
target_uri = "http://127.0.0.1/post/random",
}
})
开源案例
Views: 11,067 · Posted: 2020-03-02
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...