LogicMachine Forum
https function - Printable Version

+- LogicMachine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: https function (/showthread.php?tid=3184)



https function - benanderson_475 - 19.02.2021

i make dynamic function to call https command and to add headers like the below,

Code:
function Https_message(method, url, payload, add_headers) --method is "POST", "GET" "PUT" etc htps = require("ssl.https") msg_response = {} hders = {}      if payload or add_headers then         if payload then     hders = { ["Accept"] = "*/*",           ["Content-Type"] = "application/json",           ["Content-Length"] = #payload,           ['Host']  = ip..':'..port}     else       hders = { ["Accept"] = "*/*", ["Content-Type"] = "application/json", ['Host']  = ip..':'..port}     end         if add_headers then   for k, v in pairs(add_headers) do     hders[k] = v    end   end       end   local res, err, res_headers, status = htps.request   {     url = url,     method = method,     protocol = 'tlsv12',     headers = hders,     verify = "none",       source = ltn12.source.string(payload),           sink = ltn12.sink.table(msg_response)   }   return msg_response, err, res_headers end

My problem is, if i call get command like
Code:
local msg_response, err, Https_message('GET', 192.168.1.1:443/etc/etc, nil, nil) log(msg_response, err)
with var payload set to nil, the msg_response var returns nil,
i think because, source = ltn12.source.string(payload) would be nil


2 Questions
1- Is the ltn12.source tied together with the ltn12.sink if the source var is present?
2- How can i ignore the ltn12.source if function payload var is set to nil?


RE: https function - admin - 22.02.2021

Do not set the source if payload is not provided:
Code:
local source if payload then   source = ltn12.source.string(payload) end ... local res, err, res_headers, status = htps.request({   ...   source = source, -- source will be nil if payload is not provided   ... })

There's another issue with your code when payload or add_headers are set: ip/port variables are not set, so the function call will produce an error. You can use socket.url to parse the url into parts: http://w3.impa.br/~diego/software/luasocket/url.html#parse