Скриптовое событие MyChat Server: OnRequestByREST
Событие, которое возникает, если к WEB-серверу MyChat приходит POST или GET запрос по http/https (REST).
Адрес, на который следует отправлять запрос:
[protocol]://[server_address]:[port]/rest/[scriptname]/?[parameters]
Описание параметров запроса
Параметр |
Значение |
protocol |
http или https; |
server_address |
IP адрес или доменное имя сервера MyChat; |
port |
порт, по которому работает WEB-сервер MyChat. Если это 80/http или 443/https — можно не указывать; |
scriptname |
название скрипта в разделе событий OnRequestByREST, который будет выполняться на этот запрос. Регистр названия имеет значение, "myScript" и "myscript" — это разные скрипты. Скрипт должен быть включен! |
parameters |
параметры запроса. Например, data=test&key=value#testhash |
Шаблон события
function OnRequestByREST(sBody, sParams, sHeaders, sURL, sIPv4, sIPv6: string; iType: integer): string;
begin
// your own code
result := '{}';
end;
begin
end.
Вместо комментария может быть любой ваш код.
Описание параметров скриптового события
Параметр |
Тип |
Значение |
sBody |
string |
текст запроса; |
sParams |
string |
параметры запроса; |
sHeaders |
string |
html-заголовки запроса; |
sURL |
string |
полный URL запроса; |
sIPv4 |
string |
IP адрес клиента в формате IPv4; |
sIPv6 |
string |
IP адрес клиента в формате IPv6; |
iType |
integer |
тип запроса. 0 — GET, 1 — POST. |
Возвращаемое значение
Функция обязательно должна возвращать JSON объект в виде текстовой строки. Если вы не вернёте ничего либо вернёте неправильный объект, система автоматически вернёт JSON объект с числовым параметром "Error".
Список возможных ошибок, которые может вернуть обработчик события.
Этот ответ отдаётся сервису, который сделал POST или GET запрос к WEB серверу MyChat.
Пример
const
LOG_FILE = 'c:\temp\log.txt';
function OnRequestByREST(sBody, sParams, sHeaders, sURL, sIPv4, sIPv6: string; iType: integer): string;
begin
case iType of
0: Protocol('GET request', LOG_FILE, true);
1: Protocol('POST request', LOG_FILE, true);
end;
Protocol('sIPv4 : ' + sIPv4, LOG_FILE, true);
Protocol('sIPv6 : ' + sIPv6, LOG_FILE, true);
Protocol('sBody : ' + sBody, LOG_FILE, true);
Protocol('sParams : ' + sParams, LOG_FILE, true);
Protocol('sURL : ' + sURL, LOG_FILE, true);
Protocol('sHeaders : ' + sHeaders, LOG_FILE, true);
result := '{"done" : "ok"}';
end;
begin
end.
Скрипт обрабатывает входящий REST запрос из браузера клиента и сохраняет данные в файл. В ответ отдаёт шаблонный текстовый ответ в формате JSON.
Пример строки запроса в браузере: http://192.168.10.109:8080/rest/telegram/?data=test&key=value#testhash
В нашем примере WEB-сервер MyChat работает на IP 192.168.10.109, порт 8080, без шифрования трафика (http). Скрипт для запроса называется "telegram":
Результат работы скрипта
[31.05.2017 18:12:26] GET request
[31.05.2017 18:12:26] sIPv4 : 192.168.10.105
[31.05.2017 18:12:26] sIPv6 : ::ffff:192.168.10.105
[31.05.2017 18:12:26] sBody : ?data=test&key=value
[31.05.2017 18:12:26] sParams : ?data=test&key=value
[31.05.2017 18:12:26] sURL : /rest/telegram/123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/
[31.05.2017 18:12:26] sHeaders : Host
192.168.10.109:8080
Connection
keep-alive
Cache-Control
max-age=0
Upgrade-Insecure-Requests
1
User-Agent
Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
DNT
1
Accept-Encoding
gzip, deflate, sdch
Accept-Language
ru,en-US;q=0.8,en;q=0.6,uk;q=0.4
Cookie
io=X7qdbz1grVCXbK2TAAAA