Rest запрос с json в Lua
В Lua я новичок, поэтому не кидайтесь тапками. Да и в написании скриптов тоже. Необходимо отправить Rest запрос с json через lua. Но почему то при запуске скрипта через lua выдает ошибку "stdin:1 ''expected near '\'", Возможно ли, что он ругается на то, что не заданы данные для авторизации? И как задать эту саму авторизацию?
local http = require("socket.http")
local ltn12 = require("ltn12")
function sendRequest()
local path = "http://server:8080/assystREST/v2/events?customDefinition=PROBLEMTS"
local payload = [[ {
"eventTypeEnum": "PROBLEM",
"remarks": "test123",
"affectedUser": {
"resolvingParameters": [
{
"parameterName": "shortCode",
"parameterValue": "00005017"
},
{
"parameterName": "CSGId",
"parameterValue": "2"
}
]
},
"itemA": {
"resolvingParameters": [
{
"parameterName": "shortCode",
"parameterValue": "ASSYST SERVICEDESK"
},
{
"parameterName": "CSGId",
"parameterValue": "14"
}
]
},
"category": {
"resolvingParameters": [
{
"parameterName": "shortCode",
"parameterValue": "СБОЙ СИСТЕМНОГО ПО"
}
]
}
} ]]
local response_body = { }
local res, code, response_headers, status = http.request
{
url = path,
method = "POST",
headers =
{
["Content-Type"] = "application/json",
["Content-Length"] = payload:len()
},
source = ltn12.source.string(payload),
sink = ltn12.sink.table(response_body)
}
luup.task('Response: = ' .. table.concat(response_body) .. ' code = ' .. code .. ' status = ' .. status,1,'Sample POST request with JSON data',-1)
end
Дополнение: Раньше я парсил информацию из БД и передавал ее на RestAPI теперь мне надо передавать такие же параметры на Rest с json через lua. При этом на Rest есть авторизация, а на restapi нет.
EVENT_ID = arg[1]
require "assyst"
assyst {
dbtype = "SQLServer",
interface = "ado",
server = "server",
name = "database",
user = "usr",
password = "pass",
}
USR_ID = nil
KROPISANIE = nil
OPISANIE = nil
ITEMID = nil
CATID = nil
TYPETS = nil
OPRICH = nil
SPOSOB = nil
PRICHTS = nil
MERY = nil
VINOV = nil
PRIOR = nil
success, err = ASSYST:connect()
result, err = ASSYST:sql(string.format([[
with assyst_test_bc (USR_ID,KROPISANIE,OPISANIE,ITEMID,CATID,TYPETS,OPRICH,SPOSOB,PRICHTS,MERY,VINOV,PRIOR) AS (
SELECT i.aff_usr_id AS 'USR_ID',
REPLACE(case when i.short_desc='' then 'Технический сбой' else i.short_desc end, ' ', '+') AS 'KROPISANIE',
REPLACE(SUBSTRING(id.remarks, -4, CHARINDEX('<==#', id.remarks)), ' ', '+') as 'OPISANIE',
i.item_id as 'ITEMID',
i.inc_cat_id as 'CATID',
REPLACE(MAX(CASE WHEN cp.jptsys_web_cust_prop_id = 3945 THEN ikd.jptsys_web_lkup_data_sc END), ' ', '+') AS 'TYPETS',
REPLACE(MAX(CASE WHEN cp.jptsys_web_cust_prop_id = 3946 THEN ikd.jptsys_web_lkup_data_sc END), ' ', '+') AS 'OPRICH',
REPLACE(MAX(CASE WHEN cp.jptsys_web_cust_prop_id = 4048 THEN (case when pc.string_value ='' then ' ' else pc.string_value end) END), ' ', '+') AS 'SPOSOB',
REPLACE(MAX(CASE WHEN cp.jptsys_web_cust_prop_id = 4051 THEN (case when pc.string_value ='' then ' ' else pc.string_value end) END), ' ', '+') AS 'PRICHTS',
REPLACE(MAX(CASE WHEN cp.jptsys_web_cust_prop_id = 4052 THEN (case when pc.string_value ='' then ' ' else pc.string_value end) END), ' ', '+') AS 'MERY',
MAX(CASE WHEN cp.jptsys_web_cust_prop_id = 4053 THEN CONVERT(varchar, pc.LOOKUP_VAL_Id) else 1 END) AS 'VINOV'
,MAX(CASE WHEN cp.jptsys_web_cust_prop_id = 3925 THEN ikd.jptsys_web_lkup_data_sc END) as 'PRIOR'
FROM jptsys_web_cust_prop_cont as pc INNER JOIN
jptsys_web_cust_prop as cp ON pc.jptsys_web_cust_prop_id = cp.jptsys_web_cust_prop_id INNER JOIN
jptsys_web_lkup_data as ikd ON pc.single_sel_val_id = ikd.jptsys_web_lkup_data_id INNER JOIN
incident as i ON pc.entity_id = i.incident_id INNER JOIN
inc_data as id ON i.incident_id = id.incident_id
WHERE i.incident_id = ']] .. EVENT_ID .. [['
and ikd.jptsys_web_lkup_data_sc not in ('NTC','3TC')
group by i.aff_usr_id,i.short_desc,id.remarks,i.item_id,i.inc_cat_id,i.incident_id
)
select *
from assyst_test_bc
where PRIOR IS NOT NULL ]]))
if not result then
USR_ID = " "
KROPISANIE = " "
OPISANIE = " "
ITEMID = " "
CATID = " "
TYPETS = " "
OPRICH = " "
SPOSOB = " "
PRICHTS = " "
MERY = " "
VINOV = " "
PRIOR = " "
elseif result.n == 1 then
USR_ID = result.USR_ID
KROPISANIE = result.KROPISANIE
OPISANIE = result.OPISANIE
ITEMID = result.ITEMID
CATID = result.CATID
TYPETS = result.TYPETS
OPRICH = result.OPRICH
SPOSOB = result.SPOSOB
PRICHTS = result.PRICHTS
MERY = result.MERY
VINOV = result.VINOV
PRIOR = result.PRIOR
else
USR_ID = " "
KROPISANIE = " "
OPISANIE = " "
ITEMID = " "
CATID = " "
TYPETS = " "
OPRICH = " "
SPOSOB = " "
PRICHTS = " "
MERY = " "
VINOV = " "
PRIOR = " "
end
ASSYST:disconnect()
local http = require("socket.http")
local http_url = require("socket.url")
local RESULT_URL = 'http://127.0.0.1:8989/assyst/assystEJB/Event/new?eventType=problem&entityDefinitionId=339&affectedUserId=' .. USR_ID .. "&itemAId=" .. ITEMID .. "&categoryId=" .. CATID .. "&assignedServDeptId=1704&remarks=%22" .. OPISANIE .. "%22&shortDescription=%22" .. KROPISANIE .. "%22&custom.field.4075=%22" .. SPOSOB .. "%22&custom.field.4073=%22" .. TYPETS .. "%22&custom.field.4074=%22" .. OPRICH .. "%22&custom.field.4077=%22" .. PRICHTS .. "%22&custom.field.4078=%22" .. MERY .. "%22&custom.field.4081=" .. VINOV .. "&custom.field.4098=%22" .. EVENT_ID .. "%22&fields=formattedReference,dateLogged"
local RESULT_REQUEST = http.request(RESULT_URL)
При этом есть описание заполнения json от разработчика. Параметры из SQL запроса должны передаваться в json, но я не могу понять, как в lua передать json и задать авторизацию в REST запросе.