Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ІНТЕРНЕТ В БІЗНЕСІ.docx
Скачиваний:
29
Добавлен:
20.12.2018
Размер:
5.4 Mб
Скачать

5.2. Передача даних програмі cgi

Коли користувач заповнює форму і натискає на кнопку типу SUBMIT або на графічну кнопку (який виконує аналогічну функцію), дані з полів форми разом з іменами цих полів передаються навігатором серверу WWW. Сервер у свою чергу аналізує ці дані і запускає відповідну програму CGI, шлях до файла якої зазначений в операторі <FORM>.

Перед запуском програми CGI сервер WWW вибирає в залежності від значення параметра METHOD оператора <FORM> один із двох засобів передачі отриманих даних для опрацювання. Це методи GET і POST.

5.2.1. Метод get

Метод GET припускає передачу даних програмі CGI через перемінне середовище (environment variables). Це те саме перемінне середовище, що встановлюються в операційній системі MS-DOS командою SET.

Сервер WWW створює для програми CGI досить багато переменных середовища. Імена і призначення всіх цих перемінних будуть приведені пізніше, а поки - тільки самі необхідні.

Насамперед, метод GET припускає використання перемінне середовище з ім'ям QUERY_STRING. Саме сюди потрапляють дані з полів форми. Ці дані знаходяться в такому форматі:

Имя1=Значение1&Имя2=Значение2&Имя=Значение3

Тут у якості імен використовуються значення параметрів NAME, що задають імена поляж форми. Замість значень подставляются дані з відповідних полів. Скануючи вміст текстового рядка перемінне середовище QUERY_STRING, програма CGI може знайти в ній ім'я будь-якого потрібного поля і відповідного цього імені значення. Ніякі дані від виключених перемикачів не передаються, тому не варто думати, що в отриманому рядку обов'язково зустрінуться імена всіх поляж, розташованих у формі.

Адреса заданого рядка перемінне середовище в програмі, складеної на С, легко одержати за допомогою функції getenv:

char *szQueryString;

szQueryString = getenv("QUERY_STRING");

Якщо модифікується рядок перемінне середовище, те її варто скопіювати у внутрішній буфер. Операційна система серверу WWW може не припустити прямого редагування блока пам'яті, що містить перемінних середовищ.

Рядок, переданий у перемінне середовище QUERY_STRING, закодирована з використанням так називаної кодировки URL. У цій кодировке всі символи прогалин заміняються на символи +. Крім того, для уявлення кодів керуючих і деяких інших символів використовується послідовність символів виду %хх, де символи хх являють собою шестнадцатеричный код символу у виді двох символів ASCII.

5.2.2. Метод post

При використанні методу POST програма CGI одержує дані з форми через стандартний потік запровадження STDIN. Якщо програма CGI складена на мові програмування С, то для одержання даних вона може скористатися такими функціями, як fread або scanf.

Що ж стосується кількості байтів даних, що потрібно вважати зі стандартного потоку запровадження, то ця інформація передається програмі CGI через переменную середовища з ім'ям CONTENT_LENGTH.

Нижче приведений фрагмент коду для визначення розміру інформації для запровадження через стандартний потік STDIN:

int Size;

Size = atoi(getenv("CONTENT_LENGTH"));

Вхідні дані можуть бути потім отримані, наприклад, у такий спосіб:

char szBuf[8196];

fread(szBuf, Size, 1, stdin);

Зрозуміло, буфер для читання даних можна замовляти і динамічно, для чого варто скористатися такою функцією, як malloc.

Якщо в операторі <FORM> не зазначений параметр ENCTYPE (тип MIME переданих даних) або цей параметр має значення application/x-www-form-urlencoded, дані, отримані через стандартний потік запровадження, закодовані в кодировці URL Перед використанням випливає їх розкодувати відповідним чином.