<form action="http://localhost/cgi-bin/primer.cgi" method=GET> Введите свое имя пользователя: <input type=text maxlength=150 name=user> <p><input type=submit value=Send> </form>Мы уже обсуждали методы передачи данных в шлюз раньше. Какие тут могут быть советы ? Лично мне кажется передавать такие маленькие формы лучше всего посредством метода GET. С чем это связано ? Во-первых получить данные из переменной окружения намного легче, чем считать их из потока. Чтобы считать данные из потока надо точно знать их размер, позаботиться о выделении памяти и многом другом. Тут же обо всем позаботится сервер и встроенные средства программирования вашего языка. Во-вторых пользователь сможет обратиться к вашему скрипту непосредственно из адресной строки браузера. Например, многие программы для поиска информации в интернете используют различные поисковые сервера. Для того чтобы сделать запрос к одному из них требуется всего лишь вызвать браузер и сообщить ему URL. В Windows это делается просто в командной строке (а значит и просто сделать программе):
start http://www.abc.com/cgi-bin/search.cgi?word=hello&language=ruТаким образом программа может сразу вызвать браузер с уже подготовленной страничкой и пользователю не прийдется даже знать адрес этого поисковика и как он работает, все знает программа.
С методом POST в этом отношении сложнее, для этого программе нужно уметь работать по протоколу HTTP и связываться с серверами в интернете. Размер и сложность такой программы будет на порядок выше. Поэтому, если Ваш ресурс может быть полезен и при этом передаваемые ему данные не будут превышать 32 Кб (это ограничение на длинну URL, если я все правильно помню :-), то лучше метода GET не найти.
Давайте напишем программу для обработки этой формы.
#include <stdio.h> #include <stdlib.h> //Здесь надо вставить процедуру получения //параметра по его имени... Она была описана //раньше. char *getparam(...) { }; int main() { char *user=NULL; char *content=NULL; char *request_method=getenv("REQUEST_METHOD"); if (strcmp(request_method,"GET")!=0) { printf("Content-type: text/html\n\n"); printf("Unknown REQUEST_METHOD. Use only GET !\n"); return -1; }; content=getenv("QUERY_STRING"); user=getparam(content,"user="); printf("Content-type: text/html\n\n"); printf("User name=\"%s\"\n",user); };После того как вся программа будет собрана и откомпилированна, расположите ее в директории cgi-bin вашего вебсервера. Теперь можно смело пробовать форму написанную выше. Я для теста использовал браузер напрямую... Как я уже говорил, достаточно набрать
http://localhost/cgi-bin/primer.cgi?user=helloИ Вы увидите тот же результат, что и при использовании формы. Кстати вот он:
User name="hello"Обратите внимание на то, что я уже в первой программе начинаю предусматривать возможные ошибки, и поэтому неизвестные программе методы она не будет выполнять. Вообще Вы должны приучиться к этому сразу, т.е. отлавливать возможные ошибки уже на этапе создания шлюза, иначе без этого он может стать большой дырой в системе безопастности вашего сервера. Я по ходу шагов еще тысячу раз упомяну Вам об этом, но только потому, что это действительно очень важно.