<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html class="client-nojs" dir="ltr" lang="en">
<head>
<meta charset="UTF-8" />
<title>Модули/HTTP - OpenSCADAWiki</title>
<meta content="MediaWiki 1.26.4" name="generator" />
<link href="https://www.gnu.org/copyleft/fdl.html" rel="copyright" />
<link href="../../en/files/doc.css" rel="stylesheet" /></head>
<body><div class="floatright"><a href="../index.html"><img alt="OpenSCADA" src="../../en/files/index.png" /></a></div><div id="mw_header">
			<div class="mw-indicators">
</div>
			<h1 id="firstHeading" lang="ru">Модули/HTTP</h1>
		</div><div class="mw-content-ltr" dir="ltr" id="mw-content-text" lang="ru"><div class="mw-pt-translate-header noprint" dir="ltr" lang="en">This page is a <span class="plainlinks"><a class="external text" href="http://oscada.org/wiki/index.php?title=Special:Translate&amp;group=page-Modules%2FHTTP&amp;action=page&amp;filter=&amp;language=ru" rel="nofollow noreferrer noopener" target="_blank">translated version</a></span> of the page <a class="external" href="http://oscada.org/wiki/Modules/HTTP" title="Modules/HTTP">Modules/HTTP</a> and the translation is 81% complete.</div><hr /><div class="mw-pt-languages" dir="ltr" lang="en"><div class="mw-pt-languages-list autonym"><a class="mw-pt-languages-ui mw-pt-progress mw-pt-progress--complete" href="../../en/Modules/HTTP.html" title="Modules/HTTP (100% translated)">English</a>&nbsp;• ‎<span class="mw-pt-languages-selected mw-pt-progress mw-pt-progress--complete">mRussian</span>&nbsp;• ‎<a class="mw-pt-progress mw-pt-progress--complete" href="../../uk/Modules/HTTP.html" title="Модулі/HTTP (100% translated)">Українська</a></div></div>
<table class="wikitable">

<tr>
<th> Модуль </th>
<th> Имя </th>
<th> Версия </th>
<th> Лицензия </th>
<th> Источник </th>
<th> Языки </th>
<th> Платформы </th>
<th> Тип </th>
<th> Автор </th>
<th> Описание
</th></tr>

<tr>
<td> <a href="../Modules/HTTP.html" title="Special:MyLanguage/Modules/HTTP">HTTP</a> </td>
<td> HTTP-реализация
</td>
<td> 3.9 </td>
<td> GPL2 </td>
<td> prot_HTTP.so </td>
<td> en,uk,ru,de </td>
<td> x86,x86_64,ARM
</td>
<td> Протокол </td>
<td> Роман Савоченко </td>
<td> Предоставляет поддержку протокола HTTP для WWW-основанных пользовательских интерфейсов.
<ul><li> <b><a href="../../en/To_do.html" title="Special:MyLanguage/Works/To do">Задачи (To Do)</a>:</b></li></ul>
<p><br />
</p>
</td></tr></table>
<p>Модуль транспортного протокола HTTP предназначен для реализации поддержки сетевого протокола HTTP(Hypertext Transfer Protocol) в OpenSCADA.
</p><p>HTTP protocol is used to transfer the WWW content. For example, via HTTP the following types of documents are transmitted: html, xhtml, png, javascript, and many others. Support HTTP in OpenSCADA together with the transport <a href="../Modules/Sockets.html" title="Special:MyLanguage/Modules/Sockets">Sockets</a> and <a href="../../en/Modules/SSL.html" title="Special:MyLanguage/Modules/SSL">SSL</a> allows to implement various user functions based on the WWW interface. The module initially implements two main methods of the HTTP protocol "GET", "POST", and currently any HTTP method. The module provides control of the integrity of HTTP-queries and, jointly with Sockets and SSL transport, allows to "collect" whole requests from their fragments, as well as hold of the connection "alive" (Keep-Alive).
</p><p>Для гибкого подключения пользовательских интерфейсов к данному модулю, используется модульный механизм в рамках самого этого модуля. В роли модулей используются модули подсистемы "Пользовательские интерфейсы" с дополнительным информационным полем "SubType", имеющим значение "WWW".
</p><p>В запросах к Web ресурсам принято использовать URL(Universal Resource Locator). Следовательно, URL передаётся как основной параметр через HTTP. Первый элемент запрашиваемого URL используется для идентификации модуля UI. Например, URL "http://localhost:10002/WebCfg" означает обращение к модулю "WebCfg" на хосте "http://localhost:10002". В случае ошибочного указания идентификатора модуля, или при обращении вообще без идентификатора, модуль генерирует информационный диалог о входе и выбор одного из доступных пользовательских интерфейсов. Пример диалога показан на рисунке 1.
</p>
<div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:627px;"><a class="image" href="http://oscada.org/wiki/File:HTTP_select_ru.png"><img class="thumbimage" height="479" src="../files/HTTP_select_ru.png" width="625" /></a>  <div class="thumbcaption">Рис.1. Диалог выбора модуля WWW-интерфейса.</div></div></div></div>
<p>Модулем поддерживается многоязычность, которая включается <a class="external" href="http://oscada.org/wiki/Documents/Program_manual/ru#ConfigTr" title="Documents/Program manual/ru">динамическим переводом сообщений OpenSCADA</a>.
</p><p>Язык конечного пользователя интерфейса определяется путём и в последовательности:
</p>
<ul><li> URL параметр "lang".</li>
<li> Язык пользователя, который вошёл.</li>
<li> Язык Web-браузера из HTTP свойства "Accept-Language".</li>
<li> Общий язык процесса OpenSCADA.</li></ul>
<p>Gotten in the way language used for building interfaces of the module and passes to the WWW sub-modules into the HTTP property "oscd_lang" of the argument "vars" of <a href="#ModsHTTP">the generic, "GET" and "POST" functions</a>.
</p><p>Для конфигурации и управления этим модулем, предоставляется конфигурационная страница интерфейса управления OpenSCADA (Рис.3) где Вы можете осуществлять:
</p>
<ul><li> Контроль за активными сеансами аутентификации.</li>
<li> Конфигурацию:
<ul><li> Правила доступа для запрета и разрешения. Каждая строка является отдельным правилом и в каждом правиле доступа Вы можете использовать шаблоны, вроде "*/WebVision/*", и регулярные выражения, вроде "/[^/]+/WebVision/.+/". Полезные записи для:
<ul><li> Запрещено:
<ul><li> "*/WebCfgD/*" — <a href="../Modules/WebCfgD.html" title="Special:MyLanguage/Modules/WebCfgD">модуль WebCfgD</a> целиком;</li>
<li> "*/WebVision/*tmplSO/*" — проект СВУ "tmplSO" <a href="../Modules/WebVision.html" title="Special:MyLanguage/Modules/WebVision">модуля WebVision</a>.</li></ul></li>
<li> Разрешено:
<ul><li> "*" — всё, исключая запрещённое;</li>
<li> "/^[^/]+/[^/]*$/" — страницы модуля со всеми их ресурсами;</li>
<li> "*/login/*" — страница авторизации-входа;</li>
<li> "/^[^/]+/WebVision/[^/]*($|\?)/" — основная страница <a href="../Modules/WebVision.html" title="Special:MyLanguage/Modules/WebVision">модуля WebVision</a> без доступа к проектам СВУ;</li>
<li> "/^[^/]+/WebVision/.+_aviariesOril\d*/.*/" — проект СВУ "aviariesOril" <a href="../Modules/WebVision.html" title="Special:MyLanguage/Modules/WebVision">модуля WebVision</a>.</li></ul></li></ul></li>
<li> HTML-шаблон пользовательского интерфейса и пользовательской главной страницы. В полях HTML-шаблона должен указываться адрес к файлу HTML/XHTML, который будет использован при формировании внутренних-сервисных интерфейсов и главной страницы. Внутренние-сервисные интерфейсы, это например: выбор модулей, страница авторизации и подобное у WEB-модулей. От шаблона требуется корректность XHTML, которая позволяет разобрать файл XML-парсером, а также наличие метки "#####CONTEXT#####" в месте размещения динамического содержимого, что обязательно для внутренних-сервисных интерфейсов. Ресурсные файлы шаблонов представлены изображениями, CSS и JavaScript файлами, и которые ищутся от директории в которой указано размещение файла шаблона и от текущей директории. В случае обнаружения ошибок в шаблоне, будет использован стандартный встроенный интерфейс. Для другого, по языку, файла шаблона, Вы можете добавить суффикс языка в конец этого файла "{Мой Шаблон}_{язык}.html", однако выбирать в конфигурационных полях основной-базовый файл шаблона "{Мой Шаблон}.html". В качестве примера шаблонов Вы можете посмотреть такие наиболее используемые:
<ul><li> <a class="external" href="http://oscada.org/wiki/File:HTTP_webopenscada.html.gz" title="File:HTTP webopenscada.html.gz">Шаблон внутреннего-сервисного интерфейса и главной страницы, включая индекс модулей</a>.</li>
<li> <a class="external" href="http://oscada.org/wiki/File:HTTP_webopenscada_main.html.gz" title="File:HTTP webopenscada main.html.gz">Шаблон главной страницы</a> с прямой ссылкой на главный интерфейс <a class="external" href="http://oscada.org/wiki/Special:MyLanguage/Using/Model_AGLKS" title="Special:MyLanguage/Using/Model AGLKS">АГЛКС</a> с помощью модуля <a href="../Modules/WebVision.html" title="Special:MyLanguage/Modules/WebVision">UI.WebVision</a> и без индекса WEB-модулей.</li>
<li> <a class="external" href="http://oscada.org/wiki/File:HTTP_webopenscada_goto.html.gz" title="File:HTTP webopenscada goto.html.gz">Шаблон главной страницы</a> с прямым перенаправлением на главный интерфейс <a class="external" href="http://oscada.org/wiki/Special:MyLanguage/Using/Model_AGLKS" title="Special:MyLanguage/Using/Model AGLKS">АГЛКС</a> с помощью модуля <a href="../Modules/WebVision.html" title="Special:MyLanguage/Modules/WebVision">UI.WebVision</a>.</li></ul></li>
<li> БД активных сеансов аутентификации предусматривает внешнюю таблицу активных сеансов аутентификации — "HTTP_AuthSessions", которая включается для непустого значения и предоставляет возможность совместного использования аутентификации между разными станциями OpenSCADA и её короткого сохранения на время выключения станции.</li>
<li> Пространство генерации UID аутентификации, доступное с совместной таблицей сеансов аутентификации для гарантирования отличия "печенья" (cookie) для различных процессов OpenSCADA.</li>
<li> Время жизни, перечень пользователей разрешённых к аутентификации и установка автоматического входа. </li></ul></li></ul>
<div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:917px;"><a class="image" href="http://oscada.org/wiki/File:HTTP_mod_ru.png"><img class="thumbimage" height="775" src="../files/HTTP_mod_ru.png" width="915" /></a>  <div class="thumbcaption">Рис.3. Страница настройки модуля.</div></div></div></div>
<div class="toc" id="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#.D0.90.D1.83.D1.82.D0.B5.D0.BD.D1.82.D0.B8.D1.84.D0.B8.D0.BA.D0.B0.D1.86.D0.B8.D1.8F"><span class="tocnumber">1</span> <span class="toctext">Аутентификация</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#Modules_of_the_WEB-interface"><span class="tocnumber">2</span> <span class="toctext"><span>Modules of the WEB-interface</span></span></a></li>
<li class="toclevel-1 tocsection-3"><a href="#.D0.A4.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D1.8F_.D0.B2.D1.8B.D1.85.D0.BE.D0.B4.D0.BD.D1.8B.D1.85_.D0.B7.D0.B0.D0.BF.D1.80.D0.BE.D1.81.D0.BE.D0.B2_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.BE.D0.B3.D0.BE_API"><span class="tocnumber">3</span> <span class="toctext">Функция выходных запросов пользовательского API</span></a></li>
<li class="toclevel-1 tocsection-4"><a href="#API_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.BE.D0.B3.D0.BE_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F"><span class="tocnumber">4</span> <span class="toctext">API пользовательского программирования</span></a></li>
</ul>
</div>

<h2><span class="mw-headline" id=".D0.90.D1.83.D1.82.D0.B5.D0.BD.D1.82.D0.B8.D1.84.D0.B8.D0.BA.D0.B0.D1.86.D0.B8.D1.8F"><span class="mw-headline-number">1</span> Аутентификация</span></h2>
<p>Модулем поддерживается аутентификация в OpenSCADA при предоставлении доступа к модулям WEB-интерфейсов (рис.2).
</p>
<div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:624px;"><a class="image" href="http://oscada.org/wiki/File:HTTP_auth_ru.png"><img class="thumbimage" height="278" src="../files/HTTP_auth_ru.png" width="622" /></a>  <div class="thumbcaption">Рис.2. Диалог авторизации в OpenSCADA.</div></div></div></div>
<p>Аутентификация этим модулем осуществляется "печеньем" (cookies) с динамическим названием и пространством ИД пользователя, где название "печенья" (cookie) "oscd_UID" и используется пространство ИД пользователя в работе с совместной таблицей сеансов аутентификации, и название "oscd_UID_{PrjNm}" в роботі без неё.
</p><p>Для облегчения работы с Web-интерфейсами модуль предусматривает возможность автоматического входа от имени указанного пользователя. Конфигурация автоматического входа осуществляется на странице настройки модуля (рис.3). Автоматический вход осуществляется по совпадению адреса, указанного в колонке "Адреса", и от имени пользователя, указанного в колонке "Пользователь".
</p><p>Для большей безопасности Вы можете определить только Web-пользователей, в перечне пользователей разрешённых к аутентификации.
</p>
<h2><span class="mw-headline" id="Modules_of_the_WEB-interface"><span class="mw-headline-number">2</span> <span id="ModsHTTP" title="#ModsHTTP">Modules of the WEB-interface</span></span></h2>
<p>Modules of the user interface (UI) designed to work with the HTTP module, should indicate the information field "SubType" in the value "WWW" and "Auth" field in the value "1", if the module requires an authentication at login. For communication of the HTTP module and the UI modules an advanced communication mechanism is used. This mechanism involves export of interface functions. In this case, the UI modules must export only one generic function for all methods:
</p>
<ul><li> <b>void HTTP(const string &amp;meth, const string &amp;uri, string &amp;page, vector&lt;string&gt; &amp;vars, const string &amp;user, TProtocolIn *iprt);</b>:</li></ul>
<dl><dd><dl><dd><i>meth</i> — method of the request;</dd>
<dd><i>uri</i> — local address of the request;</dd>
<dd><i>page</i> — page with the answer;</dd>
<dd><i>sender</i> — address of the sender;</dd>
<dd><i>vars</i> — variables of the request;</dd>
<dd><i>user</i> — user, can contain previous user in the second line;</dd>
<dd><i>iprt</i> — pointer to an input part object of the protocol.</dd></dl></dd></dl>
<p>Or following different functions separately for GET and POST methods:
</p>
<ul><li> <b>void HTTP_GET(const string &amp;uri, string &amp;page, vector&lt;string&gt; &amp;vars, const string &amp;user, TProtocolIn *iprt);</b> OR</li></ul>
<dl><dd><b>void HttpGet( const string &amp;uri, string &amp;page, const string &amp;sender, vector&lt;string&gt; &amp;vars, const string &amp;user );</b> — GET method with the parameters:
<dl><dd><i>uri</i> — local address of the request;</dd>
<dd><i>page</i> — page with the answer;</dd>
<dd><i>sender</i> — address of the sender;</dd>
<dd><i>vars</i> — variables of the request;</dd>
<dd><i>user</i> — user, can contain previous user in the second line;</dd>
<dd><i>iprt</i> — pointer to an input part object of the protocol.</dd></dl></dd></dl>
<ul><li> <b>void HTTP_POST(const string &amp;uri, string &amp;page, vector&lt;string&gt; &amp;vars, const string &amp;user, TProtocolIn *iprt);</b> OR</li></ul>
<dl><dd><b>void HttpPost( const string &amp;uri, string &amp;page, const string &amp;sender, vector&lt;string&gt; &amp;vars, const string &amp;user );</b> — POST method with the parameters:
<dl><dd><i>uri</i> — local address of the request;</dd>
<dd><i>page</i> — page with the answer and with the content of the body of the POST request;</dd>
<dd><i>sender</i> — address of the sender;</dd>
<dd><i>vars</i> — variables of the request;</dd>
<dd><i>user</i> — user, can contain previous user in the second line;</dd>
<dd><i>iprt</i> — pointer to an input part object of the protocol.</dd></dl></dd></dl>
<p>Then, in the case of the HTTP "GET" request, the function "HTTP_GET" or "HttpGet" will be called, and in the case of the "POST" request, the function "HTTP_POST" or "HttpPost" will be called in the appropriate UI module, or the function "HTTP" for any method.
</p>
<h2><span class="mw-headline" id=".D0.A4.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D1.8F_.D0.B2.D1.8B.D1.85.D0.BE.D0.B4.D0.BD.D1.8B.D1.85_.D0.B7.D0.B0.D0.BF.D1.80.D0.BE.D1.81.D0.BE.D0.B2_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.BE.D0.B3.D0.BE_API"><span class="mw-headline-number">3</span> Функция выходных запросов пользовательского API</span></h2>
<p>Функция исходящих запросов <a href="../User_API.html#SYSTransport" title="Special:MyLanguage/Documents/User API">messIO()</a> оперирует обменом содержимым HTTP-запросов, завёрнутыми в XML-пакеты. Структура запроса имеет вид:
</p>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nt">&lt;req</span> <span class="na">Host=</span><span class="s">"host"</span> <span class="na">URI=</span><span class="s">"uri"</span><span class="nt">&gt;</span>
  <span class="nt">&lt;prm</span> <span class="na">id=</span><span class="s">"pId"</span><span class="nt">&gt;</span>pVal<span class="nt">&lt;/prm&gt;</span>
  <span class="nt">&lt;cnt</span> <span class="na">name=</span><span class="s">"cName"</span> <span class="na">filename=</span><span class="s">"cFileName"</span><span class="nt">&gt;</span>
    <span class="nt">&lt;prm</span> <span class="na">id=</span><span class="s">"cpId"</span><span class="nt">&gt;</span>cpVal<span class="nt">&lt;/prm&gt;</span>
    cVal
  <span class="nt">&lt;/cnt&gt;</span>
  reqVal
<span class="nt">&lt;/req&gt;</span>
</pre></div>
<dl><dd>Где:
<ul><li> <i>req</i> — метод запроса, поддерживаются методы "GET" и "POST".</li>
<li> <i>host</i> — адрес узла http-сервера в формате <i>{HostAddr}:{HostIp}</i>. Если данное поле опущено то используется адрес узла, указанный в поле адреса транспорта.</li>
<li> <i>uri</i> — адрес ресурса на http-сервере, обычно файл или директория.</li>
<li> <i>pId</i>, <i>pVal</i> — идентификатор и значение дополнительного http-параметра. Http-параметров может быть указано множество, отдельными <i>prm</i> тегами.</li>
<li> <i>cName</i>, <i>cFileName</i>, <i>cVal</i> — имя, имя-файла и значение элемента содержимого POST-запроса. Элементов содержимого может быть указано множество, отдельными <i>cnt</i> тегами.</li>
<li> <i>cpId</i>, <i>cpVal</i> — идентификатор и значение дополнительного параметра содержимого. Параметров содержимого может быть указано множество, отдельными <i>prm</i> тегами;</li>
<li> <i>reqVal</i> — одиночное содержимое POST запроса.</li></ul></dd></dl>
<p>Результатом запроса является ответ со структурой:
</p>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nt">&lt;req</span> <span class="na">Host=</span><span class="s">"host"</span> <span class="na">URI=</span><span class="s">"uri"</span> <span class="na">err=</span><span class="s">"err"</span> <span class="na">Protocol=</span><span class="s">"prt"</span> <span class="na">RezCod=</span><span class="s">"rCod"</span> <span class="na">RezStr=</span><span class="s">"rStr"</span><span class="nt">&gt;</span>
  <span class="nt">&lt;prm</span> <span class="na">id=</span><span class="s">"pId"</span><span class="nt">&gt;</span>pVal<span class="nt">&lt;/prm&gt;</span>
  respVal
<span class="nt">&lt;/req&gt;</span>
</pre></div>
<dl><dd>Где:
<ul><li> <i>req</i> — метод запроса.</li>
<li> <i>host</i> — адрес узла http-сервера.</li>
<li> <i>uri</i> — адрес ресурса.</li>
<li> <i>err</i> — ошибка, возникшая во время запроса. В случае успешного запроса это поле пустое.</li>
<li> <i>RezCod</i>, <i>RezStr</i> — результат запроса в виде кода и текста. </li>
<li> <i>pId</i>, <i>pVal</i> — идентификатор и значение дополнительного http-параметра ответа. Http-параметров может быть множество, определённые отдельными <i>prm</i> тегами.</li>
<li> <i>respVal</i> — содержимое ответа.</li></ul></dd></dl>
<p>Приведём формирование GET и POST запросов на языке JavaLikeCalc.JavaScript, в качестве примера использования данной функции в пользовательских процедурах:
</p>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="c1">//GET запрос HTML страницы</span>
<span class="nx">req</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">XMLNode</span><span class="p">(</span><span class="s2">"GET"</span><span class="p">);</span>
<span class="nx">req</span><span class="p">.</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"URI"</span><span class="p">,</span><span class="s2">"/"</span><span class="p">);</span>
<span class="nx">SYS</span><span class="p">.</span><span class="nx">Transport</span><span class="p">.</span><span class="nx">Sockets</span><span class="p">.</span><span class="nx">out_testHTTP</span><span class="p">.</span><span class="nx">messIO</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span><span class="s2">"HTTP"</span><span class="p">);</span>
<span class="nx">test</span> <span class="o">=</span> <span class="nx">req</span><span class="p">.</span><span class="nx">text</span><span class="p">();</span>

<span class="c1">//GET запрос и сохранение файла</span>
<span class="nx">req</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">XMLNode</span><span class="p">(</span><span class="s2">"GET"</span><span class="p">);</span>
<span class="nx">req</span><span class="p">.</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"URI"</span><span class="p">,</span><span class="s2">"/oscadaArch/Work/openscada-0.9-r2188.tar.lzma"</span><span class="p">);</span>
<span class="nx">SYS</span><span class="p">.</span><span class="nx">Transport</span><span class="p">.</span><span class="nx">Sockets</span><span class="p">.</span><span class="nx">out_testHTTP</span><span class="p">.</span><span class="nx">messIO</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span><span class="s2">"HTTP"</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nx">req</span><span class="p">.</span><span class="nx">attr</span><span class="p">(</span><span class="s2">"err"</span><span class="p">).</span><span class="nx">length</span><span class="p">)</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileWrite</span><span class="p">(</span><span class="s2">"/var/tmp/recvFile.tmp"</span><span class="p">,</span> <span class="nx">req</span><span class="p">.</span><span class="nx">text</span><span class="p">());</span>

<span class="c1">//POST запрос</span>
<span class="nx">req</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">XMLNode</span><span class="p">(</span><span class="s2">"POST"</span><span class="p">);</span>
<span class="nx">req</span><span class="p">.</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"URI"</span><span class="p">,</span><span class="s2">"/WebUser/FlowTec.txt"</span><span class="p">);</span>
<span class="nx">cntNode</span> <span class="o">=</span> <span class="nx">req</span><span class="p">.</span><span class="nx">childAdd</span><span class="p">(</span><span class="s2">"cnt"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"name"</span><span class="p">,</span><span class="s2">"pole0"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"filename"</span><span class="p">,</span><span class="s2">"Object2-k001-100309-17.txt"</span><span class="p">);</span>
<span class="nx">cntNode</span><span class="p">.</span><span class="nx">childAdd</span><span class="p">(</span><span class="s2">"prm"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"id"</span><span class="p">,</span><span class="s2">"Content-Type"</span><span class="p">).</span><span class="nx">setText</span><span class="p">(</span><span class="s2">"text/plain"</span><span class="p">);</span>
<span class="nx">cntText</span> <span class="o">=</span> <span class="s2">"Object2-k001\r\n"</span><span class="p">;</span>
<span class="nx">cntText</span> <span class="o">+=</span> <span class="s2">"\r\n"</span><span class="p">;</span>
<span class="nx">cntText</span> <span class="o">+=</span> <span class="s2">"v002\r\n"</span><span class="p">;</span>
<span class="nx">cntText</span> <span class="o">+=</span> <span class="s2">" n1\r\n"</span><span class="p">;</span>
<span class="nx">cntText</span> <span class="o">+=</span> <span class="s2">"  09.03.10 16   Polnyj    7155.25    216.0  32.000  17.5\r\n"</span><span class="p">;</span>
<span class="nx">cntText</span> <span class="o">+=</span> <span class="s2">"v005\r\n"</span><span class="p">;</span>
<span class="nx">cntText</span> <span class="o">+=</span> <span class="s2">" n1\r\n"</span><span class="p">;</span>
<span class="nx">cntText</span> <span class="o">+=</span> <span class="s2">"  09.03.10 16   Polnyj     188.81    350.0   4.000  40.0\r\n"</span><span class="p">;</span>
<span class="nx">cntText</span> <span class="o">+=</span> <span class="s2">"\r\n"</span><span class="p">;</span>
<span class="nx">cntNode</span><span class="p">.</span><span class="nx">setText</span><span class="p">(</span><span class="nx">cntText</span><span class="p">);</span>
<span class="nx">SYS</span><span class="p">.</span><span class="nx">Transport</span><span class="p">.</span><span class="nx">Sockets</span><span class="p">.</span><span class="nx">out_testHTTP</span><span class="p">.</span><span class="nx">messIO</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span><span class="s2">"HTTP"</span><span class="p">);</span>

<span class="c1">//POST запрос с одиночным содержимым</span>
<span class="nx">req</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">XMLNode</span><span class="p">(</span><span class="s2">"POST"</span><span class="p">);</span>
<span class="nx">req</span><span class="p">.</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"URI"</span><span class="p">,</span><span class="s2">"/WebUser/FlowTec.txt"</span><span class="p">);</span>
<span class="nx">req</span><span class="p">.</span><span class="nx">childAdd</span><span class="p">(</span><span class="s2">"prm"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"id"</span><span class="p">,</span><span class="s2">"Content-Type"</span><span class="p">).</span><span class="nx">setText</span><span class="p">(</span><span class="s2">"text/plain"</span><span class="p">);</span>
<span class="nx">cntText</span> <span class="o">=</span> <span class="s2">"Object2-k001\r\n"</span><span class="p">;</span>
<span class="nx">cntText</span> <span class="o">+=</span> <span class="s2">"\r\n"</span><span class="p">;</span>
<span class="nx">cntText</span> <span class="o">+=</span> <span class="s2">"v002\r\n"</span><span class="p">;</span>
<span class="nx">cntText</span> <span class="o">+=</span> <span class="s2">" n1\r\n"</span><span class="p">;</span>
<span class="nx">cntText</span> <span class="o">+=</span> <span class="s2">"  09.03.10 16   Polnyj    7155.25    216.0  32.000  17.5\r\n"</span><span class="p">;</span>
<span class="nx">cntText</span> <span class="o">+=</span> <span class="s2">"v005\r\n"</span><span class="p">;</span>
<span class="nx">cntText</span> <span class="o">+=</span> <span class="s2">" n1\r\n"</span><span class="p">;</span>
<span class="nx">cntText</span> <span class="o">+=</span> <span class="s2">"  09.03.10 16   Polnyj     188.81    350.0   4.000  40.0\r\n"</span><span class="p">;</span>
<span class="nx">cntText</span> <span class="o">+=</span> <span class="s2">"\r\n"</span><span class="p">;</span>
<span class="nx">req</span><span class="p">.</span><span class="nx">setText</span><span class="p">(</span><span class="nx">cntText</span><span class="p">);</span>
<span class="nx">SYS</span><span class="p">.</span><span class="nx">Transport</span><span class="p">.</span><span class="nx">Sockets</span><span class="p">.</span><span class="nx">out_testHTTP</span><span class="p">.</span><span class="nx">messIO</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span><span class="s2">"HTTP"</span><span class="p">);</span>
</pre></div>
<h2><span class="mw-headline" id="API_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.BE.D0.B3.D0.BE_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F"><span class="mw-headline-number">4</span> API пользовательского программирования</span></h2>
<p><b>Входная часть объекта модуля (SYS.Protocol.HTTP.{In})</b>
</p>
<ul><li> <i>bool setUser( string user )</i> — меняет пользователя связанного с идентификатором сеанса аутентификации.
<ul><li> <i>user</i> — пользователя для смены.</li></ul></li>
<li> <i>bool pgAccess(string URL)</i> — проверяет доступность страницы, определённой в <i>URL</i>.
<ul><li> <i>URL</i> — URL страницы, которая проверяется.</li></ul></li>
<li> <i>string pgCreator(string cnt, string rcode = "", string httpattrs = "Content-Type: text/html;charset={SYS}", string htmlHeadEls = "", string forceTmplFile = "")</i> — формирует страницу или ресурс из содержимого <i>cnt</i>, обёрнутого в HTTP с результатом <i>rcode</i>, с дополнительными атрибутами HTTP <i>httpattrs</i>, дополнительным элементом заголовка HTML <i>htmlHeadEls</i> и использованием файла шаблона <i>forceTmplFile</i>.
<ul><li> <i>cnt</i> — содержимое страницы или ресурса (изображения, XML, CSS, JavaScript, ...);</li>
<li> <i>rcode</i> — результирующий код HTTP, вроде "200 OK"; пустое значение выключает добавление HTTP заголовка;</li>
<li> <i>httpattrs</i> — дополнительные атрибуты HTTP, в основном это "Content-Type" со значением по умолчанию "text/html;charset={SYS}"; только для "Content-Type: text/html" будет осуществляться заворачивание во внутренний/сервисный, или определённый <i>forceTmplFile</i>, HTML-шаблон;</li>
<li> <i>htmlHeadEls</i> — дополнительный тег заголовка HTML, в основном это META с "Refresh" для указанного URL;</li>
<li> <i>forceTmplFile</i> — файл прямо определённого шаблона для перекрытия внутреннего/сервисного или главной страницы.</li></ul></li></ul>






</div><table style="border-top: dotted 2px #999999; margin-top: 20pt; color: gray;" width="100%"><tr><td style="text-align: left;" width="40%"><a href="http://oscada.org/wiki/Modules/HTTP/ru">Modules/HTTP/ru</a> - <a href="http://oscada.org/en/main/about-the-project/licenses/">GFDL</a></td><td style="text-align: center;">April 2025</td><td style="text-align: right;" width="40%">OpenSCADA 1+r3018</td></tr></table></body>
</html>