- •Типи веб - додатків
- •Розділ 20 Розробка інтернет-додатків
- •Рядок переданих параметрів
- •Методи передачі та отримання рядки параметрів
- •Зчитування рядка параметрів методом get
- •Зчитування рядка параметрів методом post
- •Отримання додаткової інформації
- •Компонент tWebModule
- •Параметр Request
- •Параметр Response
- •Події компонента tWebModule
- •Завдання дій, оброблювальних запити клієнта
Рядок переданих параметрів
Введення даних користувачем проводиться засобами інтерфейсу, реалізованого за допомогою веб-форми. Клацання на кнопці SUBMIT, розташованої на формі, викликає CGI-сценарій, зазначений в тезі <F0RM> за допомогою атрибуту ACTION. Перед запуском сценарію сервер формує рядок параметрів. Вміст цього рядка буде визначатися інтерактивними елементами, розташованими на формі. Кожен з цих елементів має ідентифікатор, що задається атрибутом NAME, і значення, яке визначається атрибутом VALUE або послідовністю символів, введених користувачем. З ідентифікаторів елементів управління і їх значень формується рядок параметрів наступного формату: ідентіфікатор1 = значення1 & ідентіфікатор2 = значення2 ...
Кожен параметр цього рядка відповідає одному елементу управління та перед-ставлять собою ім'я елемента і його значення, розділені знаком рівності. Раз ¬ особисті (відносяться до різних елементів управління) параметри розділяються в рядку символами &.
Якщо символ = або & входить до складу імені або значення елемента керування, то він кодується послідовністю із трьох знаків: перший знак -%, за ним слідують дві шістнадцяткові цифри, які є кодом символу (наприклад, символ = кодується як% 3D, а символ & - як% 26,). Крім цих двох знаків, три символьними послідовностями зазвичай кодуються всі знаки, за виключенням латинських букв, цифр і символу пробілу. Символ пробілу замінюється символом плюс (+).
Отриманий рядок параметрів насамперед слід декодувати.
1. Поділ рядка на пари ідентіфікатор_М = значеніе_М
2. Виділення в кожній парі ідентифікатора і значення.
3. Заміна символу плюс (+) в кожному ідентифікаторі і кожному значенні пробілом.
4. Перетворення кожної три символьної послідовності, що починається зі знака%, в символ ASCII.
Таким чином, алгоритм декодування досить простий і зводиться до кількох строковим операціям.
Методи передачі та отримання рядки параметрів
Рядок параметрів може передаватися веб-серверу або методом GET, або методом POST. Метод передачі даних визначається значенням атрибута METHOD в тезі <F0RM>:
□ при використанні методу GET рядок параметрів передається разом з URL викликається CGI-додатки, а для поділу URL-адреси та рядки параметрів використовується символ питання (?);
□ у разі використання методу POST рядок параметрів передається в тілі НТТР-запиту.При розробці CGI-сценарію важливо знати не тільки спосіб передачі рядки параметрів, але і технологію отримання її в CGI-додатку. В залежності від методу передачі рядки параметрів розрізняються і методи її одержання:
□ при використанні методу GET рядок параметрів передається CGI-додатку через змінну оточення QUERY_STRING;
□ при використанні методу POST дані передаються CGI-додатку через стандартний потік вводу консольної програми, і довжина рядка в цьому випадку може бути визначена через змінну оточення CONTENT_LENGTH.
Зчитування рядка параметрів методом get
Для отримання рядки параметрів в CGI-додатку методом GET можна використовувати наступну функцію Win32 API, що повертає значення змінної оточення з заданим ім'ям:function GetEnvironmentVariable (IpName: PChar:IpBuffer: PChar; nSize: DWORD): DWORD: stdcall
тут:
□ IpName - ім'я змінної оточення;
□ IpBuffer - рядок PChar, в яку буде занесено значення зазначеної змінної оточення;
□ nSize - довжина рядка IpBuffer.Значення, що повертається функцією GetEnvironmentVariable, дорівнює нулю в тому випадку, якщо змінна оточення (її ім'я зазначено параметром IpName) не визначена. Один з можливих варіантів фрагмента програми, що виконує зчитування даних з змінної оточення QUERY_STRING, має наступний вигляд:
var
buff: PChar:
Stl: String:begin/ / Виділяємо пам'ять під рядок параметрів GetMemCbuff.200);
/ / Отримуємо рядок параметрів GetEnvironmentVariable ('QUERY_STRING'. Buff.200);
/ / Перетворимо рядок PChar у рядок Паскаля Stl: = StrPas (buff):
/ / Звільняємо пам'ять FreeMem (buff);
end;
