![]() |
|
API, POST - 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: API, POST (/showthread.php?tid=4338) |
API, POST - tomnord - 01.11.2022 So, I've run into a wall on something as ease as a POST function to a API. How do I format the request to get this to work? Code: curl --request POST \
--url https://api.easee.cloud/api/chargers/EH840488/settings \
--header 'Authorization: Bearer *****MY TOKEN*****' \
--header 'content-type: application/*+json' \
--data '
{
"dynamicChargerCurrent": 16
}
'Code: function WriteToEasee(request, request_body)
request_url = 'https://api.easee.cloud/api/' .. request
local response_body = {}
local request_body = ""
local body, code, hdrs, stat = ssl.https.request{
url = request_url;
method = "POST";
headers =
{
["Content-Type"] = "application/json";
["Authorization"] = "Bearer " .. API_Token;
};
source = ltn12.source.string(request_body);
sink = ltn12.sink.table(response_body);
}
log(code)
if code == 200 then
ret = table.concat(response_body)
ret = json.pdecode(ret)
return ret
else
--API_Token = GetToken() -- request a new token
end
end
dynCurr = 10
-- Dynamic current setting.
WriteToEasee('chargers/' .. ChargerID .. '/settings', "dynamicChargerCurrent" .. dynCurr)I guess it's a small matter, but i have not worked with POST functions before. RE: API, POST - admin - 01.11.2022 Request is missing Content-Length header: Code: ["Content-Length"] = #request_body,RE: API, POST - tomnord - 01.11.2022 (01.11.2022, 07:19)admin Wrote: Request is missing Content-Length header: Still 400: Code: function WriteToEasee(request, request_body)
request_url = 'https://api.easee.cloud/api/' .. request
local response_body = {}
local content_length
if type(request_body) == "string" then
content_length = #request_body
else
request_body = ""
end
local body, code, hdrs, stat = ssl.https.request{
url = request_url;
method = "POST";
headers =
{
["Content-Type"] = "application/json";
["Authorization"] = "Bearer " .. API_Token;
["Content-Length"] = #request_body,
};
source = ltn12.source.string(request_body);
sink = ltn12.sink.table(response_body);
}
log(code)
if code == 200 then
ret = table.concat(response_body)
ret = json.pdecode(ret)
return ret
else
--API_Token = GetToken() -- request a new token
end
end
dynCurr = 10
-- Dynamic current setting.
WriteToEasee('chargers/' .. ChargerID .. '/settings', "dynamicChargerCurrent" .. dynCurr)(01.11.2022, 07:23)tomnord Wrote:(01.11.2022, 07:19)admin Wrote: Request is missing Content-Length header: Could it be a mismatch with this? WriteToEasee('chargers/' .. ChargerID .. '/settings', "dynamicChargerCurrent" .. dynCurr) In the docs it says this: "{\"dynamicChargerCurrent\":16}" RE: API, POST - admin - 01.11.2022 You need to encode your request data using JSON: Code: body = require('json').encode({ dynamicChargerCurrent = dynCurr })
WriteToEasee('chargers/' .. ChargerID .. '/settings', body)RE: API, POST - tomnord - 01.11.2022 (01.11.2022, 07:27)admin Wrote: You need to encode your request data using JSON: BINGO, Thank You, as always ![]() Only thing missing now is the response_body.. that one is blank. |