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

Рядок переданих параметрів

Введення даних користувачем проводиться засобами інтерфейсу, реалізованого за допомогою веб-форми. Клацання на кнопці 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;

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