解决openresty http客户端不支持https的问题

 OpenResty默认没有提供Http客户端,需要使用第三方提供;当然我们可以通过ngx.location.capture 去方式实现,但它只能发送一个子请求。

第三方基本是以lua-resty-http为代表,这个类库如果去访问http和正规的https是没有问题,也挺好用的,但如果访问使用山寨证书的请求会出一些错误,比如:handshake failed,socket error等等之类的错误。对于种我的解决办法是使用curl,可以很好解决这个问题,现在来看算是比较完美的。
具体代码如下:

 

local curl = require("luacurl")

local function postJson(url,postData,c)
    local result = { }
    if c == nil then
        c = curl.new()
    end
    c:setopt(curl.OPT_URL, url)
    c:setopt(curl.OPT_SSL_VERIFYHOST,0)
    c:setopt(curl.OPT_SSL_VERIFYPEER,false)
    c:setopt(curl.OPT_POST,true)
    c:setopt(curl.OPT_HTTPHEADER, "Content-Type: application/json")
    c:setopt(curl.OPT_POSTFIELDS, postData)
    c:setopt(curl.OPT_WRITEDATA, result)
    c:setopt(curl.OPT_WRITEFUNCTION, function(tab, buffer)
        table.insert(tab, buffer)
        return #buffer
    end)
    local ok = c:perform()
    return ok, table.concat(result)
end

 local ok,html = postJson(serverUrl,data);
        if ok then
            ngx.say(html)
        end

 

posted on 2016-03-09 12:38  RedFox(低调)  阅读(3236)  评论(0编辑  收藏  举报

导航