• 解决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
  • 相关阅读:
    开灯问题
    独木舟上的旅行
    剑指offer--从尾到头打印链表
    映芬视觉网页练习
    游标的使用
    数据库操作
    关系型数据库
    数据库基础知识
    TCPSocket系列二
    HTML5新标签与css3选择器
  • 原文地址:https://www.cnblogs.com/wfcfan/p/5257684.html
Copyright © 2020-2023  润新知