Стандатр CGI(Common Gateway Interface, т. е. общий шлюзовый интерфейс) явился первой ласточкой в развитии программирования на стороне сервера. CGI-программа называется ещё скриптом и может в принцепе быть написаной на любом языке программирования. Самый популярный язык для написания CGI-скриптов - Perl. Однако, как мы сейчас увидим, писать CGI-программы на С - весьма простое занятие. Смысл работы CGI-программы в следующем: - CGI-программа получает данные через окружение;
- стандартный вывод для CGI-программы означает формирование новой Web-стрвницы и передача её клиенту.
Итак, начнем с разбора окружения. Вспомним, что стандартный заголовок главной функции С-программы имеет вид: int main(int argc, char* avgv[], char* envp[]) Параметр envp представляет собой масив строк, закнчивающийся строкой NULL. Это и есть окружение. Таким образом, мы легко можем посмотреть весь масив в поисках нужных данных. Создадим проект простой консольной программы: #include "stdafx.h" #include "cgi1.h" #include <stdlib.h>
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { printf("Content-Type: text/html\n\n"); printf("<HTML>\n"); printf("<HEAD> <TITLE>Пример CGI-программы </TITLE></HEAD>\n"); printf("<BODY>"\n); printf("Пример CGI-программы на С\n"); int i=0; while(envp[i]) { printf("<p>значение параметра %s </p>",envp[i]); i++ } printf("</BODY>\n"); printf("</HTML>\n); return 0; } Ниже представлен результат работы программы, отображаемый броузером. Для вызова CGI достаточно на странице указать форму с сылкой на CGI-программу. Например, вот так: <form action="cgi1.exe" method="get" ID="Form1"> <input name="last" ID="Text2"> <input type="submit" ID="Submit1" NAME="Submit1"> <input type="reset" ID="Reset1" NAME="Reset1"> </form> По нажатии кнопки Submit будет выдана страница с представленой ниже информацией. В действительности, однако, можно поступить ещё проще: набрать в строке броузера команду, где вместо имени страници указать имя CGI-программы. Напримет так: https://имя_сервера/cgi1.exe Результат работы такстовой CGI-программы Пример CGI-программы на С Значение параметра ALLUSERSPROFILE=E:\Documents and settings\All Users Значение параметра CommonProgramFiles=E:\ProgramFiles\Common Files Значение параметра ComSpac=E:\WINNT\system32\cmd.exe Значение параметра CONTENT_LENGTH=0 Значение параметра GATEWAY_INTERFACE=CGI/1.1 Значение параметра HTTP_ACCEPT=image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.mspowerpoint,application/vnd.msexcel,application/msword,*/* Значение параметра HTTP_ACCEPT_LANGUAGE=ru Значение параметра HTTP_CONNECTION=Keep-Alive Значение параметра HTTP_HOST=localhost Значение параметра HTTP_REFERER=https://localhost/index.html Значение параметра HTTP_USER_AGENT=Mozila/4.0 и т. д. Самой важной для нас строкой окружения является QUERY_STRING. Здесь содержатся параметры, передаваемые в CGI-программу. Конечно здесь придётся самому писать процедуру разбора командной строки, но это совсем не сложно. Как видим, формат строки представляет собой следующую строку: имя=значение&имя1=значение&... |