Hello,
I tried to implement work with libcurl
the above code works in console
but not working when used with module ngx_lua
maybe someone knows the reason
thank you
[root@VKTR052 lua]# cat resty/curl.lua
local ffi = require "ffi"
local libcurl = ffi.load('libcurl')
local setmetatable = setmetatable
local error = error
local pairs = pairs
--local type = type
--local ngx = ngx
module(...)
_VERSION = '0.01'
local mt = { __index = _M }
ffi.cdef[[
void *curl_easy_init();
int curl_easy_setopt(void *curl, int option, ...);
int curl_easy_perform(void *curl);
void curl_easy_cleanup(void *curl);
char *curl_easy_strerror(int code);
]]
function new(self)
return setmetatable({}, mt)
end
function make(self,params_table)
local respond
local curl = libcurl.curl_easy_init()
--[[
#define CURLOPTTYPE_LONG 0
#define CURLOPTTYPE_OBJECTPOINT 10000
#define CURLOPTTYPE_FUNCTIONPOINT 20000
#define CURLOPTTYPE_OFF_T 30000
local CURLOPT_CAINFO = 10065
local CURLOPT_CONNECTTIMEOUT = 78
local CURLOPT_COOKIE = 10022
local CURLOPT_FOLLOWLOCATION = 52
local CURLOPT_HEADER = 42
local CURLOPT_HTTPHEADER = 10023
local CURLOPT_INTERFACE = 10062
local CURLOPT_POST = 47
local CURLOPT_POSTFIELDS = 10015
local CURLOPT_REFERER = 10016
local CURLOPT_SSL_VERIFYPEER = 64
local CURLOPT_URL = 10002
local CURLOPT_USERAGENT = 10018
]]
local keys = {"CAINFO","CONNECTTIMEOUT","COOKIE","FOLLOWLOCATION","HEADER","HTTPHEADER","INTERFACE","POST","POSTFIELDS","REFERER","SSL_VERIFYPEER","URL","USERAGENT","USE_SSL"}
local values = {10065,78,10022,52,42,10023,10062,47,10015,10016,64,10002,10018,119}
if curl
then
for k,v in pairs(params_table)
do
for i = 1, #keys
do
if k == keys[i]
then
local check = libcurl.curl_easy_setopt(curl, values[i], v)
-- if check == 0 then ngx.print(check,v) end
end
end
end
local res = libcurl.curl_easy_perform(curl)
if res ~= 0
then
return(ffi.string(libcurl.curl_easy_strerror(res)))
end
libcurl.curl_easy_cleanup(curl)
end
end
local class_mt = {
-- to prevent use of casual module global variables
__newindex = function (table, key, val)
error('attempt to write to undeclared variable "' .. key .. '"')
end
}
setmetatable(_M, class_mt)
[root@VKTR052 lua]# cat test_mcurl.lua
local mcurl = require "resty.curl"
local curl = mcurl:new()
local params = {}
params["URL"] = "https://www.google.com"
params["CONNECTTIMEOUT"] = 2
params["USE_SSL"] = 1
params["SSL_VERIFYPEER"] = 0
print (curl:make(params))
[root@VKTR052 lua]# luajit test_mcurl.lua
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="">here</A>.
</BODY></HTML>
[root@VKTR052 lua]# cat ../sites/nextstep/curl.lua
local mcurl = require "resty.curl"
local curl = mcurl:new()
local params = {}
params["URL"] = "https://www.google.com"
params["CONNECTTIMEOUT"] = 2
params["USE_SSL"] = 1
params["SSL_VERIFYPEER"] = 0
ngx.header.content_type = "text/html; charset=utf-8"
ngx.print (curl:make(params))
[root@VKTR052 lua]#
[root@VKTR052 lua]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.4.3
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC)
configure arguments: --add-module=../ngx_devel_kit/ --add-module=../lua-nginx-module-ffi --with-http_geoip_module