OpenSCADAWiki: Doc/HTTP ...

Home | Index | Changes | Comments | Users | Registration | Login  Password:  
 
This is an old revision of Doc/HTTP from 2016-12-26 19:36:30..

Модуль <HTTP> подсистемы "Протоколы"

Модуль: HTTP
Имя: HTTP-реализация
Тип: Протокол
Источник: prot_HTTP.so
Версия: 1.8.0
Автор: Роман Савоченко
Описание: Предоставляет поддержку протокола HTTP для WWW-основанных пользовательских интерфейсов.
Лицензия: GPL

Contents

Введение

Модуль транспортного протокола HTTP предназначен для реализации поддержки сетевого протокола HTTP(Hypertext Transfer Protocol) в системе OpenSCADA.


Протокол HTTP используется для передачи содержимого WWW. Так, через HTTP передаются следующие типы документов: html, xhtml, png, java и многие другие. Добавление поддержки HTTP в систему OpenSCADA в комплексе с транспортом Sockets позволяет реализовывать различные пользовательские функции на основе WWW интерфейса. Модуль HTTP реализует два основных метода протокола HTTP: GET и POST. Модуль HTTP обеспечивает контроль целостности HTTP-запросов и, совместно с транспортом Sockets, позволяет “собирать” целостные запросы из их фрагментов, а также обеспечивать сохранение соединения живым (Keep-Alive).


Для гибкого подключения пользовательских интерфейсов к данному модулю используется модульный механизм в рамках самого модуля "HTTP". В роли модулей используются модули подсистемы “Пользовательские интерфейсы” с дополнительным информационным полем “SubType”, имеющим значение “WWW”.


В запросах к Web ресурсам принято использовать URL(Universal Resource Locator), следовательно URL передаётся как основной параметр через HTTP. Первый элемент запрашиваемого URL используется для идентификации модуля UI. Например URL: http://localhost:10002/WebCfg означает обращение к модулю "WebCfg" на хосте http://localhost:10002. В случае ошибочного указания идентификатора модуля или при обращении вообще без идентификатора "HTTP" модуль генерирует диалог информации о входе и с предоставлением выбора одного из доступных пользовательских интерфейсов. Пример диалога показан на рисунке 1.


Диалог выбора модуля WWW-интерфейса. (43 Kb)
Рис.1. Диалог выбора модуля WWW-интерфейса.

1. Аутентификация

Модулем поддерживается аутентификация в системе OpenSCADA при предоставлении доступа к модулям WEB-интерфейсов (рис.2). Диалог формируется на языке "XHTML 1.0 Transitional"!


Диалог авторизации в системе OpenSCADA. (12 Kb)
Рис.2. Диалог авторизации в системе OpenSCADA.

Для облегчения работы с Web-интерфейсами модуль предусматривает возможность автоматического входа от имени указанного пользователя. Конфигурация автоматического входа осуществляется на странице настройки модуля (рис.3).


Страница настройки модуля. (89 Kb)
Рис.3. Страница настройки модуля.

На странице настройки модуля можно изучить активные сеансы аутентификации; указать: время жизни аутентификации, HTML-шаблон собственного интерфейса; настроить автоматический вход.


Автоматический вход осуществляется по совпадению адреса, указанного в колонке "Адреса", от имени пользователя, указанного в колонке "Пользователь".


В поле HTML-шаблона должен указываться адрес к файлу HTML/XHTML, который будет использован для формирования внутренних интерфейсов. Например, для выбора модулей и страницы авторизации. От шаблона требуется корректность XHTML, позволяющая спарсить файл XML-парсером, а также наличие метки "#####CONTEXT#####" в месте размещения динамического содержимого. Ресурсные файлы шаблона, в лице изображений, CSS и JavaScript файлов, ищутся от директории в которой указано размещение файла шаблона. В случае обнаружения ошибок в шаблоне будет использован стандартный интерфейс.

2. Модули пользовательского WEB-интерфейса

Модули пользовательского интерфейса (UI), предназначенные для совместной работы с модулем HTTP, должны устанавливать информационное поле “SubType” значением “WWW” и поле "Auth" значением "1", если модуль требует аутентификации при входе. Для связи модуля HTTP и модулей UI используется расширенный механизм коммуникации. Этот механизм подразумевает экспорт интерфейсных функций. В данном случае UI модули должны экспортировать функции:


Далее в случае поступления HTTP запроса "GET" будет вызываться функция "HttpGet", а в случае запроса "POST" будет вызываться функция "HttpPost" в соответствующем модуле UI.

3. API функции исходящих запросов

Функция исходящих запросов (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");

Ссылки

Referring pages: Doc
Doc/WebUser
Doc/WebVision
Using/PLC/firmware
Using/SmartHouse


 
There are no files on this page.[Display files/form]
There is no comment on this page. [Display comments/form]