русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Шановні українці! Матеріал був перекладений з російської мови. Тому можуть бути незначні помикли...

CGI програми

CGI додаток може бути розроблено на будь-якій мові, що допускає створення 32-розрядних додатків (наприклад, C++, Delfi, PHP та ін.). У цій роботі розглядається приклад розробки CGI додатки на Visual C++.

Коли програма починає роботу, йому вже доступні такі, створені сервером змінні оточення:

  • REQUEST_METHOD - вказує на використовуваний метод передачі даних з форми (визначається параметром METHOD тега <FORM>):
    • GET;
    • POST.
  • QUERY_STRING - при використанні методу GET містить надіслані з форми дані у вигляді пар "ім'я=значення&ім'я=значення& . . ." з використанням URL-кодування.
  • CONTENT_LENGTH - при використанні методу POST задає обсяг переданих даних (в байтах). Самі дані передаються через стандартний потік вводу (для C++ це stdin ).

Якщо порівняти два методу передачі даних - GET та POST, то можна відзначити наступне:

  • Метод GET дещо простіше у використанні, але містить обмеження на обсяг переданих даних. Може бути рекомендований для передачі даних щодо невеликого обсягу;
  • Метод POST обмежень на обсяг переданих даних не має.

Для доступу до змінних оточення в C++ є функція getenv("ім'я змінної оточення"), яка повертає значення цієї змінної оточення.
CGI-програма повинна створювати динамічну Web-сторінку у вигляді стандартного потоку виводу (для C++ це stdout ). Першим рядком виведених даних повинен бути заголовок-HTTP протоколу, який визначає тип повертаються браузеру даних в наступному форматі:

  • Content-type:text/plain - звичайні текстові дані;
  • Content-type:text/html - дані у вигляді HTML-документа.

Крім того для правильного розпізнавання тексту на кирилиці в HTTP-заголовку вказується тип кодування: charset=-windows 1251.
Щоб заголовок-HTTP протоколу було розпізнано браузером, він повинен обов'язково відділятися від HTML-документа пустим рядком.
Нижче наведено фрагмент програми на VisualC++ ("z_visual.cpp"), який реалізує наступні дії:

  • формує заголовок-HTTP протоколу;
  • динамічно формує HTML-документ, який передається Web-сервером браузеру для реалізації у вигляді web-сторінки;
  • визначає метод передачі даних і виводить його назву на екран;
  • для методу GET переписує дані форми з змінної оточення QUERY_STRING" у szQueryString.
  • для метод POST визначає і виводить на екран обсяг переданих даних і переписує ці дані з вхідного потоку stdin в szQueryString.
  • виводить на екран прийняті дані.

 

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

void main(void){
char *szQueryString;
char *szMethod;
int size;

text_com// Вивід HTTP-заголовка:
printf("Content-type:text/html;charset=-windows 1251\n\n");
/Динамічна/ формування Web сторінки:
printf("<H1 style=\"text-align:center;font:italic bold 12mm;color:#E000E0\">");
printf("CGI-додаток працює!</H1><BR>");
szMethod=getenv("REQUEST_METHOD");
printf("<P style=\"text-align:center; font-size:7mm; color:#0000f0\"> Метод: %s",
szMethod);
// Аналіз методу передачі даних:
if (!strcmp(getenv("REQUEST_METHOD"),"GET"))
//Метод GET:
szQueryString=getenv("QUERY_STRING");
else {
//Метод POST:
size=atoi(getenv("CONTENT_lENGTH"));
szString=(char*)malloc(size*sizeof(char));
fread(szString,size,1,stdin);
szString[size]="\0";
printf("<P>Обсяг переданих параметрів: %d",size);
}
printf("<P>Параметри, передані з форми: %s",szQueryString);
// Подальша обробка даних:
. . .
}

Переглядів: 4558

Повернутися взміст


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн