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)
This is as far as I've gotten. I'm getting code 400, request is missing or has invalid values.
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:
Code: ["Content-Length"] = #request_body,
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:
Code: ["Content-Length"] = #request_body,
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)
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:
Code: body = require('json').encode({ dynamicChargerCurrent = dynCurr })
WriteToEasee('chargers/' .. ChargerID .. '/settings', body)
BINGO, Thank You, as always
Only thing missing now is the response_body.. that one is blank.
|