<?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="uk">Модулі/HTTP</h1>
		</div><div class="mw-content-ltr" dir="ltr" id="mw-content-text" lang="uk"><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=uk" 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 100% 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;• ‎<a class="mw-pt-progress mw-pt-progress--complete" href="../../ru/Modules/HTTP.html" title="Модули/HTTP (81% translated)">mRussian</a>&nbsp;• ‎<span class="mw-pt-languages-selected mw-pt-progress mw-pt-progress--complete">Українська</span></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 використовується для передачі вмісту WWW. До прикладу, через HTTP передаються наступні типи документів: html, xhtml, png, javascript і багато інших. Підтримка HTTP у OpenSCADA разом із транспортом <a href="../Modules/Sockets.html" title="Special:MyLanguage/Modules/Sockets">Sockets</a> і <a href="../Modules/SSL.html" title="Special:MyLanguage/Modules/SSL">SSL</a>, дозволяє реалізовувати різні користувацькі функції на WWW інтерфейсі. Модуль первинно реалізує два основних методи HTTP протоколу GET, POST, і наразі будь який метод HTTP. Модуль забезпечує контроль цілісності HTTP-запитів та, спільно з транспортом Сокети і SSL, дозволяє "збирати" цілісні запити з їх фрагментів, а також забезпечувати утримання з'єднання "живим" (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:632px;"><a class="image" href="http://oscada.org/wiki/File:HTTP_select_uk.png"><img class="thumbimage" height="475" src="../files/HTTP_select_uk.png" width="630" /></a>  <div class="thumbcaption">Рис.1. Діалог вибору модуля WWW-інтерфейсу.</div></div></div></div>
<p>Модулем підтримується багатомовність, яка вмикається <a class="external" href="http://oscada.org/wiki/Documents/Program_manual/uk#ConfigTr" title="Documents/Program manual/uk">динамічним перекладом повідомлень OpenSCADA</a>.
</p><p>Мова кінцевого користувацького інтерфейсу визначається шляхом та у послідовності:
</p>
<ul><li> URL параметр "lang".</li>
<li> Мова користувача, що увійшов.</li>
<li> Мова Web-браузеру з HTTP властивості "Accept-Language".</li>
<li> Загальна мова процесу OpenSCADA.</li></ul>
<p>Отримана таким чином мова використовується для побудови інтерфейсів цього модуля і передається WWW під-модулям у HTTP властивості "oscd_lang", через аргумент "vars" <a href="#ModsHTTP">функції узагальнення, "GET" і "POST"</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:830px;"><a class="image" href="http://oscada.org/wiki/File:HTTP_mod_uk.png"><img class="thumbimage" height="775" src="../files/HTTP_mod_uk.png" width="828" /></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.D1.96.D0.BA.D0.B0.D1.86.D1.96.D1.8F"><span class="tocnumber">1</span> <span class="toctext">Аутентифікація</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#.D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.96_WEB-.D1.96.D0.BD.D1.82.D0.B5.D1.80.D1.84.D0.B5.D0.B9.D1.81.D1.83"><span class="tocnumber">2</span> <span class="toctext"><span>Модулі WEB-інтерфейсу</span></span></a></li>
<li class="toclevel-1 tocsection-3"><a href="#.D0.A4.D1.83.D0.BD.D0.BA.D1.86.D1.96.D1.8F_.D0.B2.D0.B8.D1.85.D1.96.D0.B4.D0.BD.D0.B8.D1.85_.D0.B7.D0.B0.D0.BF.D0.B8.D1.82.D1.96.D0.B2_.D0.BA.D0.BE.D1.80.D0.B8.D1.81.D1.82.D1.83.D0.B2.D0.B0.D1.86.D1.8C.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.BA.D0.BE.D1.80.D0.B8.D1.81.D1.82.D1.83.D0.B2.D0.B0.D1.86.D1.8C.D0.BA.D0.BE.D0.B3.D0.BE_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D1.83.D0.B2.D0.B0.D0.BD.D0.BD.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.D1.96.D0.BA.D0.B0.D1.86.D1.96.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:619px;"><a class="image" href="http://oscada.org/wiki/File:HTTP_auth_uk.png"><img class="thumbimage" height="286" src="../files/HTTP_auth_uk.png" width="617" /></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=".D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.96_WEB-.D1.96.D0.BD.D1.82.D0.B5.D1.80.D1.84.D0.B5.D0.B9.D1.81.D1.83"><span class="mw-headline-number">2</span> <span id="ModsHTTP" title="#ModsHTTP">Модулі WEB-інтерфейсу</span></span></h2>
<p>Модулі користувацького інтерфейсу (UI), які призначені для спільної роботи із модулем HTTP, мають встановлювати інформаційне поле "SubType" значенням "WWW" та поле "Auth" значенням "1", якщо модуль потребує автентифікації при вході. Для зв'язування модуля HTTP і модулів UI використовується розширений механізм комунікації. Цей механізм передбачає експорт інтерфейсних функцій. У даному випадку, UI модулі мають експортувати лише одну загальну функцію для усіх методів:
</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> — метод запиту;</dd>
<dd><i>uri</i> — локальна адреса запиту;</dd>
<dd><i>page</i> — сторінка з відповіддю;</dd>
<dd><i>sender</i> — адреса відправника;</dd>
<dd><i>vars</i> — змінні запиту;</dd>
<dd><i>user</i> — користувач, може містити попереднього користувача у другому рядку;</dd>
<dd><i>iprt</i> — посилання на об'єкт вхідної частини протоколу.</dd></dl></dd></dl>
<p>Або наступні різні функції окремо для GET і POST методів:
</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> АБО</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 з параметрами:
<dl><dd><i>uri</i> — локальна адреса запиту;</dd>
<dd><i>page</i> — сторінка з відповіддю;</dd>
<dd><i>sender</i> — адреса відправника;</dd>
<dd><i>vars</i> — змінні запиту;</dd>
<dd><i>user</i> — користувач, може містити попереднього користувача у другому рядку;</dd>
<dd><i>iprt</i> — посилання на об'єкт вхідної частини протоколу.</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> АБО</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 з параметрами:
<dl><dd><i>uri</i> — локальна адреса запиту;</dd>
<dd><i>page</i> — сторінка з відповіддю та вмістом тіла запиту POST;</dd>
<dd><i>sender</i> — адреса відправника;</dd>
<dd><i>vars</i> — змінні запиту;</dd>
<dd><i>user</i> — користувач, може містити попереднього користувача у другому рядку;</dd>
<dd><i>iprt</i> — посилання на об'єкт вхідної частини протоколу.</dd></dl></dd></dl>
<p>Надалі, у випадку надходження HTTP запиту "GET" буде викликатися функція "HTTP_GET" або "HttpGet", а у випадку запиту "POST" буде викликатися функція "HTTP_POST" або "HttpPost", у відповідному модулі UI, або функція "HTTP" для будь якого методу.
</p>
<h2><span class="mw-headline" id=".D0.A4.D1.83.D0.BD.D0.BA.D1.86.D1.96.D1.8F_.D0.B2.D0.B8.D1.85.D1.96.D0.B4.D0.BD.D0.B8.D1.85_.D0.B7.D0.B0.D0.BF.D0.B8.D1.82.D1.96.D0.B2_.D0.BA.D0.BE.D1.80.D0.B8.D1.81.D1.82.D1.83.D0.B2.D0.B0.D1.86.D1.8C.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.BA.D0.BE.D1.80.D0.B8.D1.81.D1.82.D1.83.D0.B2.D0.B0.D1.86.D1.8C.D0.BA.D0.BE.D0.B3.D0.BE_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D1.83.D0.B2.D0.B0.D0.BD.D0.BD.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> та для мови <i>lang</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/uk">Modules/HTTP/uk</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>