阿里云开放搜索openresty lua sdk-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

阿里云开放搜索openresty lua sdk

2019-01-30 21:09:26 3607 1
自己写的一个阿里云开放搜索 lua脚本,可正常使用,分享给大家!
--
-- 阿里云开放搜索 sdk
-- User: bugscaner
-- Date: 2019-01-18 15:24:35
-- Time: 下午 15:24:35

local http = require "resty.http"

local _M = {
    __version = "0.01"
}

local mt = {__index = _M}

function new(search_config)
    return setmetatable(search_config, mt)
end

function search(self, searchquery)
    local searchquery = ngx.encode_args(searchquery)
    local opensearch_path = "/v3/openapi/apps/"..self.appname.."/search";
    searchquery = string.gsub(searchquery,"'","%%27")
    local headers, err = self:_build_auth_headers(searchquery,opensearch_path)
    local url = "http://" .. headers['Host'] .. opensearch_path ..'?' .. searchquery
    if err then return nil, err end
    local res, err = self:_send_http_request(url, "GET", headers)
    if 200 ~= res.status then
        ngx.say("出错啦")
        ngx.log(ngx.ERR, res.status, err)
        return false
    end
    return res.body
end

function _sign(self, str)
    local key = ngx.encode_base64(ngx.hmac_sha1(self.accesskey_secret, str))
    return 'OPENSEARCH '.. self.accesskey_id .. ':' .. key
end

function _send_http_request(self, url, method, headers, body)
    local httpc = http.new()
    httpc:set_timeout(30000)
    local res, err = httpc:request_uri(url, {
        method = method,
        headers = headers,
        body = body
    })
    httpc:set_keepalive(30000, 10)
    return res, err
end

function _build_auth_headers(self, searchquery,opensearch_path)
    --这里传入的searchquery 是一个table   就是python里面所说的字典形式,比如:{query="query=title:'搜索'&&config=start:0,hit:1,format:json",fetch_fields="id;title"}
    --需要注意
    local utctime = string.gsub(ngx.utctime(ngx.time())," ","T").."Z" --这个是 Date
    math.randomseed(tostring(ngx.now()):reverse():sub(1, 6))
    local nonce = ngx.time()..math.random(10000,99999) --这个是
    local appname = self.appname
    local host = self.internet_host
    local http_params = opensearch_path.."?"..searchquery
    local check_param       =   "GET\n\napplication/json\n"..utctime.."\n".."x-opensearch-nonce:"..nonce.."\n"..http_params
    local headers  =    {
        ['Date']            =    utctime,
        ['X-Opensearch-Nonce']        =    nonce,
        ['Content-Type']        =    "application/json",
        ['Authorization']    =    self:_sign(check_param),
        ['Connection']        =    'keep-alive',
        ['Host']            =   host
    }
    return headers
end

-- public
_M.new = new
_M.search = search

-- private
_M._build_auth_headers = _build_auth_headers
_M._send_http_request = _send_http_request
_M._sign = _sign

return _M






取消 提交回答
全部回答(1)
  • 满脸菊花
    2019-01-30 21:29:38
    Re阿里云开放搜索openresty lua sdk
    留言试试看!!!!!!!!!!



    0 0
相关问答

0

回答

阿里云OSS支持哪些语言版本的SDK调用API呢?

2021-12-13 19:08:25 333浏览量 回答数 0

1

回答

阿里云OSS支持哪些语言版本的SDK调用API呢?

2021-12-13 19:08:26 405浏览量 回答数 1

1

回答

【精品问答】阿里云开放平台、SDK

2020-04-24 17:27:31 1908浏览量 回答数 1

1

回答

阿里云提供哪些SDK

2018-04-13 20:57:36 631浏览量 回答数 1

1

回答

请问阿里云提供UDP直播的SDK吗?会提供代码给我们吗?

2017-05-03 11:56:36 2453浏览量 回答数 1

3

回答

购买阿里云香港区的oss,能否绑定未备案的域名?

2017-04-04 04:11:39 7119浏览量 回答数 3

3

回答

阿里云PHP的SDK怎么使用

2016-04-07 17:17:33 6856浏览量 回答数 3

1

回答

阿里云PHP的SDK怎么使用

2016-04-07 17:16:34 5493浏览量 回答数 1

4

回答

阿里云C SDK的问题

2015-11-21 16:55:10 10506浏览量 回答数 4

2

回答

大家有遇到过用阿里云官方的oss-sdk也报403签名错误的情况么?

2015-08-28 14:07:50 5554浏览量 回答数 2
+关注
满脸菊花
http://tools.bugscaner.com
0
文章
10
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载