Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
91-105.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
118.78 Кб
Скачать

Зчитування рядка параметрів методом post

При використанні методу POST рядок параметрів зчитується зі стандартного потоку введення. При цьому слід виконувати зчитування саме такої кількості символів, яке міститься в переданої рядку - спроба вважати більше символів, ніж є, призведе до «зависання» програми. Якщо ж рахувати не всі символи, то частина інформації буде втрачена. Для реалізації процедури зчитування даних з стандартного потоку введення найпростіше використовувати стандартну процедуру read мови Pascal. Кількість символів, які потрібно вважати, передається через змінну оточення CONTENT_LENGTH. Таким чином, при використанні методу POST фрагмент програми, що виконує зчитування рядка параметрів, виявляється складніше, так як вимагає двох процедур: звернення до змінної оточення і зчитування даних з стандартного потоку введення:

varbuff: PChar:

ContentLength.i: Integer:

Stl: String:

C: Char:

begin/ / Виділяємо пам'ять під рядок PChar для зчитування / / даних з змінної оточення CONTENT_LENGTH GetMemCbuff, 50):

/ / Прочитуємо дані із змінної / / оточення CON TEN T_L Е NGTH GetEnvironmentVariablet'CONTENT_LENGTH '. Buff.50);

/ / Перетворимо рядок в число ContentLength: = StrToInt (StrPas (buff)):

/ / Звільняємо виділену пам'ять FreeMem (buff):

/ / Прочитуємо ContentLength зі стандартного потоку введення Stl: - ":

for i:-l to ContentLength do begin Read (C):

Stl: = Stl + C: end;

end:

Отримання додаткової інформації

При розробці CGI-сценаріїв можна використовувати і ряд інших змінних оточення, через які веб-сервер передає додаткову інформацію про користувача, запустити сценарій. Ряд змінних оточення, які містять найбільш важливу інформацію, наведено в табл. 20.1.Перед отриманням рядки параметрів звичайно треба перевірити, який метод передачі інформації використаний. Це забезпечить правильність зчитування передається інформації в будь-якому випадку.

Таблиця 20.1. Основні змінні оточення

Назва

Опис

REQUEST_METHOD

Метод передачі інформації (GET або POST)

SERVER_NAME

IP-адрес або ім'я сервера

SERVER_PORT

Номер порту, який використовується при зверненні до сервера

SERVER_PROTOCOL

Назва і версія протоколу, за яким був переданий запит

PATHJNFO

Рядок параметрів, розташована в запиті після імені сценарію,

але до даних запиту

REMOTE_ADDR

IP-адреса вузла, з якого був посланий запит

REMOTE_HOST

Доменне ім'я вузла, з якого надійшов запит

Проілюструємо це на прикладі. Об'єднаємо наведені вище фрагменти програм таким чином, щоб забезпечити коректне отримання даних будь-яким методом. В якості результату роботи сценарію виведемо ім'я використовуваного метода і отриманий рядок параметрів:

program console;

{SAPPTYPE CONSOLE}

{$E CGI}

uses

SysUtils.Windows;

var

buff: PChar;

ContentLength.i: Integer;

Stl,St2: String:

C: Char;

begin GetMem(buff.50);

GetEnvironmentVariablet'REQUEST_METHOD'.buff.50):

Stl:-StrPas(buff);

FreeMem(buff): i:=Length(Stl): while i>0 do begin

Stl[i]:=UpCase(Stl[i]):

dec(i)

end;

if Stl='GET' then begin GetMem(buff,200);

GetEnvironmentVari’able( 'QUERY_STRING' .buff ,200);

St2:=StrPas(buff):

FreeMem(buff): end:

if St1='POST' then begin GetMem(buff,50):

GetEnvironmentVariable('CONTENT_LENGTH'.buff,50);

St2:=StrPas(buff);

FreeMem(buff);

Content Length : =St гТо I nt ( St 2 ) :

St2: = ";

for i:=1 to ContentLength do begin Read(C):

St2:=St2+C:

end:

end:

Stl:=‘Method '+Stl:

Stl:='<H2 ALIGN=CENTER>’+Stl+'</H2>':

St2:='Query string: '+St2:

St2:='<H2 ALIGN=CENTER>'+St2+'</H2>'; writeln('Content-Type: text/html'): writeln;

writeln('<HTML>'): writeln('<HEAD>'):

writeln( '<TITLE>npnMep СС1-приложениж/Т1ТЕЕ>’ ) : writeln('</HEAD>'): writeln('<B0DY>');

writeln('<H2 ALIGN=CENTER>Hel1 о. World!</H2>');

writeln(Stl) :

writeln(St2) ;

writeln('</B0DY>'):

writeln('</HTML>');

end.

Для перевірки працездатності наведеної програми створимо HTML-документ, що містить дві форми, що розрізняються лише способом передачі інформації. Щоб не ускладнювати приклад, розмістимо на формі тільки два елементи управління - кнопку SUBMIT і поле введення. Текст HTML-документа в цьому випадку буде виглядати приблизно так:

<HTML>

<HEAD>

<TITLE> Пример CGI-приложения </TITLE>

</HEAD>

<B0DY>

<H2> Метод GET </H2>

<F0RM METHOD="GET" ACTION="/scripts/console.cgi">

<1NPUT TYPE=''TEXT" NAME=''Editl" VALUE="Test"><BR><BR>

<1NPUT TYPE=''SUBMIT">

</F0RM>

<BR><BR>

<H2> Метод POST </H2>

<F0RM METH0D="P0ST" ACTION="/scripts/console.cgi">

<1NPUT TYPE="TEXT" NAME="Editl" VALUE="Test"><BR><BR>

<1NPUT TYPE="SUBMIT">

</F0RM>

</B0DY>

</HTML>

Нагадаємо, що даний документ повинен називатися default.htm і розташовуватися в каталозі Wwwroot, а відкомпільований файл CGI-сценарію - в каталозі Scripts.Якщо тепер запустити веб-браузер і набрати в адресному рядку ім'я вашого комп'ютера (localhost або 127.0.0.1), то у вікні браузера відобразиться документ. При натисканні на кнопці SUBMIT, що відноситься до форми, що використовує метод GET, у вікні браузера відобразиться документ, а при натисканні на кнопці, що відноситься до форми, що використовує метод POST – документ.

Зверніть увагу, що в другому випадку (при використанні методу POST), в полі введення було введено кириличний текст. В отриманій рядку параметрів всі символи кирилиці закодовані три символьними послідовностями.

Розглянутий приклад дозволяє лише отримати рядок параметрів в CGI-сценарії. Як правило, цього недостатньо. Отриманий рядок необхідно декодувати і потім обробити дані користувача. Така задача досить проста і може бути вирішена без використання яких-небудь спеціальних засобів.

Розробка веб-додатків спеціальними засобами Delphi

Отже, в попередніх розділах цього розділу нами були розглянуті основні питання розробки CGI-додатків, включаючи:

□ передачу інформації від клієнта CGI-сценарієм;

□ особливості отримання цієї інформації в CGI-додатку в залежності від використовуваного методу передачі;

□ формування сценарію відповіді, що посилається клієнтові.

При розгляді цих питань був приведений ряд простих прикладів створення CGI-додатків на мові Object Pascal. В принципі, на базі цієї інформації можна виконати розробку CGI-сценарію для будь-якої операційної системи на будь-якій мові програмування. Це пов'язано з тим, що способи передачі та отримання даних користувача скрізь абсолютно однакові. Однак використання спеціалізованих засобів дозволяє в значній мірі спростити розробку веб-додатків, особливо в тих випадках, коли здійснюється розробка додатків для роботи з базами даних.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]