Модуль | Имя | Версия | Лицензия | Источник | Языки | Платформы | Тип | Автор | Описание |
---|---|---|---|---|---|---|---|---|---|
HTTP | HTTP-реализация | 3.8 | GPL2 | prot_HTTP.so | en,uk,ru,de | x86,x86_64,ARM | Protocol | Roman Savochenko Maxim Lysenko (2009) — the page initial translation |
Provides support for the HTTP protocol for WWW-based user interfaces.
|
Модуль транспортного протокола HTTP предназначен для реализации поддержки сетевого протокола HTTP(Hypertext Transfer Protocol) в OpenSCADA.
Протокол HTTP используется для передачи содержимого WWW. Так, через HTTP передаются следующие типы документов: html, xhtml, png, javascript и многие другие. Поддержка HTTP в OpenSCADA, в комплексе с транспортом Sockets, позволяет реализовывать различные пользовательские функции на основе WWW интерфейса. Модуль реализует два основных метода протокола HTTP: GET и POST. Модуль обеспечивает контроль целостности HTTP-запросов и, совместно с транспортом Sockets, позволяет "собирать" целостные запросы из их фрагментов, а также обеспечивать удержание соединения "живым" (Keep-Alive).
Для гибкого подключения пользовательских интерфейсов к данному модулю, используется модульный механизм в рамках самого этого модуля. В роли модулей используются модули подсистемы "Пользовательские интерфейсы" с дополнительным информационным полем "SubType", имеющим значение "WWW".
В запросах к Web ресурсам принято использовать URL(Universal Resource Locator). Следовательно, URL передаётся как основной параметр через HTTP. Первый элемент запрашиваемого URL используется для идентификации модуля UI. Например, URL "http://localhost:10002/WebCfg" означает обращение к модулю "WebCfg" на хосте "http://localhost:10002". В случае ошибочного указания идентификатора модуля, или при обращении вообще без идентификатора, модуль генерирует информационный диалог о входе и выбор одного из доступных пользовательских интерфейсов. Пример диалога показан на рисунке 1.
Модулем поддерживается многоязычность, которая включается динамическим переводом сообщений OpenSCADA.
Язык конечного пользователя интерфейса определяется путём и в последовательности:
Полученный таким образом язык используется для построения интерфейсов этого модуля и передаётся WWW под-модулям в HTTP свойстве "oscd_lang", через аргумент "vars" функций "GET" и "POST".
Для конфигурации и управления этим модулем, предоставляется конфигурационная страница интерфейса управления OpenSCADA (Рис.3) где Вы можете осуществлять:
Модулем поддерживается аутентификация в OpenSCADA при предоставлении доступа к модулям WEB-интерфейсов (рис.2).
Аутентификация этим модулем осуществляется "печеньем" (cookies) с динамическим названием и пространством ИД пользователя, где название "печенья" (cookie) "oscd_UID" и используется пространство ИД пользователя в работе с совместной таблицей сеансов аутентификации, и название "oscd_UID_{PrjNm}" в роботі без неё.
Для облегчения работы с Web-интерфейсами модуль предусматривает возможность автоматического входа от имени указанного пользователя. Конфигурация автоматического входа осуществляется на странице настройки модуля (рис.3). Автоматический вход осуществляется по совпадению адреса, указанного в колонке "Адреса", и от имени пользователя, указанного в колонке "Пользователь".
Для большей безопасности Вы можете определить только Web-пользователей, в перечне пользователей разрешённых к аутентификации.
Модули пользовательского интерфейса (UI), предназначенные для совместной работы с модулем HTTP, должны устанавливать информационное поле "SubType" значением "WWW" и поле "Auth" значением "1", если модуль требует аутентификации при входе. Для связи модуля HTTP и модулей UI используется расширенный механизм коммуникации. Этот механизм предусматривает экспорт интерфейсных функций. В данном случае, UI модули должны экспортировать функции:
Далее, в случае поступления HTTP запроса "GET" будет вызываться функция "HTTP_GET" или "HttpGet", а в случае запроса "POST" будет вызываться функция "HTTP_POST" или "HttpPost", в соответствующем модуле UI.
Функция исходящих запросов (messIO()) оперирует обменом содержимым HTTP-запросов, завёрнутыми в XML-пакеты. Структура запроса имеет вид:
<req Host="host" URI="uri">
<prm id="pId">pVal</prm>
<cnt name="cName" filename="cFileName">
<prm id="cpId">cpVal</prm>
cVal
</cnt>
reqVal
</req>
Результатом запроса является ответ со структурой:
<req Host="host" URI="uri" err="err" Protocol="prt" RezCod="rCod" RezStr="rStr">
<prm id="pId">pVal</prm>
respVal
</req>
Приведём формирование GET и POST запросов на языке JavaLikeCalc.JavaScript, в качестве примера использования данной функции в пользовательских процедурах:
//GET запрос HTML страницы
req = SYS.XMLNode("GET");
req.setAttr("URI","/");
SYS.Transport.Sockets.out_testHTTP.messIO(req,"HTTP");
test = req.text();
//GET запрос и сохранение файла
req = SYS.XMLNode("GET");
req.setAttr("URI","/oscadaArch/Work/openscada-0.9-r2188.tar.lzma");
SYS.Transport.Sockets.out_testHTTP.messIO(req,"HTTP");
if(!req.attr("err").length) SYS.fileWrite("/var/tmp/recvFile.tmp", req.text());
//POST запрос
req = SYS.XMLNode("POST");
req.setAttr("URI","/WebUser/FlowTec.txt");
cntNode = req.childAdd("cnt").setAttr("name","pole0").setAttr("filename","Object2-k001-100309-17.txt");
cntNode.childAdd("prm").setAttr("id","Content-Type").setText("text/plain");
cntText = "Object2-k001\r\n";
cntText += "\r\n";
cntText += "v002\r\n";
cntText += " n1\r\n";
cntText += " 09.03.10 16 Polnyj 7155.25 216.0 32.000 17.5\r\n";
cntText += "v005\r\n";
cntText += " n1\r\n";
cntText += " 09.03.10 16 Polnyj 188.81 350.0 4.000 40.0\r\n";
cntText += "\r\n";
cntNode.setText(cntText);
SYS.Transport.Sockets.out_testHTTP.messIO(req,"HTTP");
//POST запрос с одиночным содержимым
req = SYS.XMLNode("POST");
req.setAttr("URI","/WebUser/FlowTec.txt");
req.childAdd("prm").setAttr("id","Content-Type").setText("text/plain");
cntText = "Object2-k001\r\n";
cntText += "\r\n";
cntText += "v002\r\n";
cntText += " n1\r\n";
cntText += " 09.03.10 16 Polnyj 7155.25 216.0 32.000 17.5\r\n";
cntText += "v005\r\n";
cntText += " n1\r\n";
cntText += " 09.03.10 16 Polnyj 188.81 350.0 4.000 40.0\r\n";
cntText += "\r\n";
req.setText(cntText);
SYS.Transport.Sockets.out_testHTTP.messIO(req,"HTTP");
Входная часть объекта модуля (SYS.Protocol.HTTP.{In})
Modules/HTTP/ru - GFDL | March 2024 | OpenSCADA 0.9.7 |