Merci beaucoup Lamparo, j'avais vu ce forum mais bêtement je n'avais pas regardé les pages suivantes,
j'ai eu ton code mais je n'arrive pas à le faire fonctionner et je ne comprends pas ce que je me trompe?
À ce stade, je me demande si je mettre au bon endroit ip, username e password:
je les mets dans cette partie du code - Voir les parties en vert- (où je mets username-manu et password-manu)
if (not QNAP) then
QNAP = {}
QNAP.globalvariable = ""
-- --------------------------------------------------------------------------------------------------------------
-- Obtient le XML et le retourne sous forme de table LUA
-- --------------------------------------------------------------------------------------------------------------
QNAP.getTokenFromXml = function()
--local QNAP2URL = Net.FHttp(ip,port);
local QNAP2URL = Net.FHttp("MY IP", 13131);
response = QNAP2URL:GET("/cgi-bin/authLogin.cgi?user=user-manu_pwd=password-manu");
xmlTable = QNAP.iif(response ~= nil, QNAP.newParser().ParseXmlText(response), "");
if (xmlTable.QDocRoot ~= nil) then
qsidstr = xmlTable.QDocRoot.authSid:value();
if (string.len(qsidstr)>0) then
fibaro:debug("Qtoken founded");
qsidstr = qsidstr:gsub("[".."<![CDATA[".."]", '');
qsidstr = qsidstr:gsub("[".."]".."]", '');
qsidstr = qsidstr:gsub("["..">".."]", '');
fibaro:debug(qsidstr);
response = QNAP2URL:GET("/cgi-bin/sys/sysRequest.cgi?subfunc=power_mgmt&count=0.1234&sid="..qsidstr.."&apply=shutdown");
if (string.find(response, "OK")) then
fibaro:log("Power Off Server")
else
fibaro:log("ERROR")
end
end
end
end
-- -------------------------------------------------------------------------------------------------------------
-- Teste la condition et retourne la valeur true ou false
-- -------------------------------------------------------------------------------------------------------------
QNAP.iif = function(condition, iftrue, iffalse)
if (condition) then
return iftrue
end
return iffalse
end
-- -------------------------------------------------------------------------------------------------------------
-- Ceci est une version modifiée par Steven de Corona-XML-Module par Jonathan Beebe qui a son tour
-- est basée sur Alexander Makeev's Lua-only XML parser .
-- see https://github.com/Cluain/Lua-Simple-XML-Parser
-- -------------------------------------------------------------------------------------------------------------
QNAP.newParser = function()
parseXml = {}
parseXml.FromXmlString = function(value)
value = string.gsub(value, "([%x]+)%;",
function(h)
return string.char(tonumber(h, 16))
end);
value = string.gsub(value, "([0-9]+)%;",
function(h)
return string.char(tonumber(h, 10))
end);
value = string.gsub(value, "'", "'");
value = string.gsub(value, ">", ">");
value = string.gsub(value, "<", "<");
value = string.gsub(value, "&", "&");
return value;
end
parseXml.ParseArgs = function(node, s)
string.gsub(s, "(%w+)=([\"'])(.-)%2", function(w, _, a)
node:addProperty(w, parseXml.FromXmlString(a))
end)
end
parseXml.ParseXmlText = function(xmlText)
local stack = {}
local top = parseXml.newNode()
table.insert(stack, top)
local ni, c, label, xarg, empty
local i, j = 1, 1
while true do
ni, j, c, label, xarg, empty = string.find(xmlText, "<(%/?)([%w_:]+)(.-)(%/?)>", i)
if not ni then break end
local text = string.sub(xmlText, i, ni - 1);
if not string.find(text, "^%s*$") then
local lVal = (top:value() or "") .. parseXml.FromXmlString(text)
stack[#stack]:setValue(lVal)
end
if empty == "/" then -- empty element tag
local lNode = parseXml.newNode(label)
parseXml.ParseArgs(lNode, xarg)
top:addChild(lNode)
elseif c == "" then -- start tag
local lNode = parseXml.newNode(label)
parseXml.ParseArgs(lNode, xarg)
table.insert(stack, lNode)
top = lNode
else -- end tag
local toclose = table.remove(stack) -- remove top
top = stack[#stack]
if #stack < 1 then
error("XmlParser: nothing to close with " .. label)
end
if toclose:name() ~= label then
error("XmlParser: trying to close " .. toclose.name .. " with " .. label)
end
top:addChild(toclose)
end
i = j + 1
end
local text = string.sub(xmlText, i);
if #stack > 1 then
error("XmlParser: unclosed " .. stack[#stack]:name())
end
return top
end
parseXml.newNode = function(name)
local node = {}
node.___value = nil
node.___name = name
node.___children = {}
node.___props = {}
function node:value() return self.___value end
function node:setValue(val) self.___value = val end
function node:name() return self.___name end
function node:setName(name) self.___name = name end
function node:children() return self.___children end
function node:numChildren() return #self.___children end
function node:addChild(child)
if self[child:name()] ~= nil then
if type(self[child:name()].name) == "function" then
local tempTable = {}
table.insert(tempTable, self[child:name()])
self[child:name()] = tempTable
end
table.insert(self[child:name()], child)
else
self[child:name()] = child
end
table.insert(self.___children, child)
end
function node:properties() return self.___props end
function node:numProperties() return #self.___props end
function node:addProperty(name, value)
local lName = "@" .. name
if self[lName] ~= nil then
if type(self[lName]) == "string" then
local tempTable = {}
table.insert(tempTable, self[lName])
self[lName] = tempTable
end
table.insert(self[lName], value)
else
self[lName] = value
end
table.insert(self.___props, { name = name, value = self[name] })
end
return node
end
return parseXml;
end
end
QNAP.getTokenFromXml();