Прости CGI приложения на Delphi


Простото прилагане CGI до Делфи.

Простото прилагане CGI до Делфи.

На първо място, това, което е CGI. Е съкращение от английски Common Gateway интерфейс. Накратко това е интерфейс между програмата и WWW-сървър (по-точно, на HTTP сървър). Какво е това? Какво би създаване на динамични HTML страници, които не са само статичен текст и зависят от приноса на потребителите и външни условия.
По този начин е възможно да се създадат привлекателни сайтове в интернет, добавете диалози с посетителите, статистики, анкети, удари броячи и т.н. Всичко зависи от задачите и въображението на предприемача.

Е, как да работи с приложението CGI?

Всичко, което ще напиша по-нататък се отнася до Спечели и HTTP IIS сървър платформа. въпреки че по принцип важи и за други платформи и сървъри.
заявление CGI е програма, която работи под управлението на операционната система. В нашия случай, това просто ще бъде компилиран изпълним (Търсейки) файл. Където конзола (не GUI, т.е. без GUI) тип. Взаимодействие с HTTP сървър се извършва с помощта на стандартния вход / изход и на околната среда променливи, създадени за това приложение. По принцип това е почти достатъчно за разбирането на CGI :-). Какво всъщност се случва? Да започнем с един прост (ужас банален, но къде да отида) например.

Това, което трябва (и за следващите примери, също)

Изводът е прост страница със знак "Hello World" (все още не е динамичен).
  • Създаване на нова кандидатура.
  • Махай се от единствената форма на проекта (не е необходимо да се поддържа).
  • Отидете да видите менюто -> източник на проекта. Премахване на всички между началото и края.
  • Приложенията премахване Форми и пишат на Windows.
  • Преди да започнете да пишете (към конзолата).
Докато подготовката е завършена, с изключение на проекта някъде другаде, като например hello.dpr. Това беше основният шаблон. Той дойде по-удобно за в бъдеще, така че това може да се дублира и как TMPL-cgi.dpr или премахване на хранилището. колкото искате.
Преди да се премести на, нека да видим какво ще се случи, когато искане на клиент (браузър) на страницата от сървъра. Т.е. проследи цялата верига от браузъра чрез сървъра към програмата си и обратно.

Събиране и го сложите в CGI-бен директория на сървъра, а след това се опита да го наричат ​​от браузъра. Ако нещо не работи, трябва да се pokovyryatsya с настройките на браузъра, на сървъра, както и права за достъп. И двойна проверка програма за ochepyatok :-). Ако това не работи, не можеш да продължиш напред, така че трябва да се работи.
Той спечелил? Voila! Продължавай. (Размер другото програма, докато цялата 8,5 кб)

Какви са всички едни и същи на околната среда променливи получава нашата програма? Е, да има списък на това, което ние можем да се справят с обработката на искането. Ако се рови в помощ, можете да намерите няколко функции LPVOID GetEnvironmentStrings (свободен) и Булева FreeEnvironmentStrings (LPTSTR lpszEnvironmentBlock); Това е, което ни трябва. Protsedurku създаде обект TStrings да запълни двойки променлива = опция.

Сега програма използва клауза нужда да се добавят уроци и SysUtils. Тя, обаче, vspuhnet повече от пет пъти, но къде да отида. Функциите които се нуждаем. Не ги пиша все едно отново? Е, в крайна сметка тя ще се изпълнява на сървъра, а източникът няма да отиде в мрежата. Какво друго искаш? Добавете няколко променливи. Ето текста на програмата:

Часовник, който показва часа в сървъра.
Това е динамична страница, тя се променя неговото съдържание в зависимост от външните условия (време на сървъра :-). Не трябва да има никакви затруднения. Това е кода на програмата. (GetEnvStrings тук не е необходимо)

Уроци единица тук не е необходимо. размер на програмата от 32 килобайта. Часове статични, в смисъл, че докато те не са много "работи" (тече) и необходимостта от актуализиране на страницата отново се зареди.

Модификация: Auto Update Time. Ние използваме специална команда на клиентския браузър. За да направите това, поставете следния ред веднага след линията с истината презаредите страницата всяка секунда е много разточително. Системните администратори могат да убиват за трафик :-) Тя е малка на тази страница, но все пак.
около 160 байта * 60 секунди * 60 минути * 24 часа * 30 дни = 395 мегабайта на месец.
Така че бъдете внимателни с опресняване :-)

Тук трябва да се има предвид, че не всички герои се тук от низа на заявката.
Такива като пространството е преведен на 20% и с българския език изобщо е проблем. Има много нюанси, наложени от протокола HTTP, така внимателно разгледа спецификациите, в противен случай си CGI-бен е пълен с дупки. За нашите тестове, че е доста подходящ опростен модел, без пропуски и изключения. Той построява малка уточняване на параметрите на нашата молба (с помощта на версията на часовника старата):
  • Ако има параметър Type = проста, генериране на часовника без секунди
  • Ако има параметър Color = брой, цвета на текста определя от броя
параметри двойки разделени със запетая. Тук основната трудност в параметрите на анализа. Ако (както се договорихме) abstragirovatsya от потенциалните сложността за кодиране, тя може да помогне отново StringList му CommaText собственост. Тук фрагментира цялата програма, прегледайте изходния код: