OpenSCADAWiki: Doc/HTTP ...

Home | Index | Changes | Comments | Users | Registration | Login  Password:  
 
This is an old revision of Doc/HTTP from 2017-06-11 21:57:33..

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

Модуль: HTTP
Имя: HTTP-реализация
Тип: Протокол
Источник: prot_HTTP.so
Версия: 2.1
Автор: Роман Савоченко
Описание: Предоставляет поддержку протокола 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-шаблон главной страницы, время жизни аутентификации; настроить автоматический вход.


Каждая строка является отдельным правилом и в каждом правиле доступа Вы можете использовать шаблоны (вроде "*/WebVision/*") и регулярные выражения (вроде "/[^/]+/WebVision/.+/").


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


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

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

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

void HttpGet( const string &url, string &page, const string &sender, vector<string> &vars, const string &user ); — Метод GET c параметрами:
url — адрес запроса;
page — страница с ответом;
sender — адрес отправителя;
vars — переменные запроса;
user — пользователь системы;
iprt — ссылка на объект входной части протокола.

void HttpPost( const string &url, string &page, const string &sender, vector<string> &vars, const string &user ); — метод POST c параметрами:
url — адрес запроса;
page — страница с ответом и содержимым тела запроса POST;
sender — адрес отправителя;
vars — переменные запроса;
user — пользователь системы;
iprt — ссылка на объект входной части протокола.

Далее, в случае поступления HTTP запроса "GET" будет вызываться функция "HTTP_GET" или "HttpGet", а в случае запроса "POST" будет вызываться функция "HTTP_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");

4. API программирования пользователя

Именно этот объект модуля "Protocol.HTTP" [SYS.Protocol.HTTP.pgCreator()]

Ссылки

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]