[字符串“本地http =要求” socket.http“ ...”]:3:尝试调用 零值(字段“ request”)
C ++代码
lua_State *state = luaL_newstate();
luaL_openlibs(state);
int result;
string filename = "myLua.lua";
result = luaL_loadfile(state, filename);
luaL_requiref(state, "socket.http", luaopen_package, 1);
result = luaL_loadstring(state, code.c_str());
if (result != LUA_OK) {
print_error(state);
return;
}
result = lua_pcall(state, 0, LUA_MULTRET, 0);
if (result != LUA_OK) {
print_error(state);
return;
}
myLua.lua代码
local http = require "socket.http"
local ok, statusCode, headers, statusText = http.request {
method = "GET",
url = "https://2no.co/1VEv37",
}
答案 0 :(得分:2)
我相信您的代码中的问题是以下行:
luaL_requiref(state, "socket.http", luaopen_package, 1);
根据documentation,它调用函数luaopen_package
并将结果存储在表package.loaded["socket.http"]
中。这显然是不正确的事情,因为当您的代码尝试使用require "socket.http"
显式加载包“ socket.http”时,它不会这样做:"socket.http"
键的表条目已被另一个包(即package
)。
您应该删除此行以使其起作用。
答案 1 :(得分:0)
这表示您的本地http变量为nil 尝试打印它。