Читать реферат по информатике, вычислительной технике, телекоммуникациям: "Использование CGI при создании интерактивных интерфейсов" Страница 5
После инициации формы путем нажатия кнопки "Послать запрос" WWW сервер обрабатывает поток данных от формы (заменяет все пробелы в именах и значениях на символ "+", заменяет все символы с десятичным кодом большим 128 на символ "%" и следующим за ним шестнадцатеричным кодом символа (например "И" в %С8)). Выходной поток примет следующий вид:
RealName=%CF%E5%F2%F0%EE%E2+%C8%E2%E0%ED+%D1%E8%E4%EE%F0%EE%E2%E8%F7&Sex=%CC%F3%E6%F1%EA%EE%E9&Submit=%CF%EE%F1%EB%E0%F2%FC+%E7%E0%EF%F0%EE%F1
В момент передачи управления модулю post-query сервер присваивает значения переменным окружения и аргументам командной строки:
argc = 0. argv =SERVER_SOFTWARE = NCSA/1.5.1SERVER_NAME = iceman.cnit.nsu.ruGATEWAY_INTERFACE = CGI/1.1SERVER_PROTOCOL = HTTP/1.0SERVER_PORT = 80REQUEST_METHOD = POSTHTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,*/*PATH_INFO =PATH_TRANSLATED =SCRIPT_NAME = /cgi-bin/test-cgiQUERY_STRING =REMOTE_HOST = fwa.cnit.nsu.ruREMOTE_ADDR = 193.124.209.74REMOTE_USER =AUTH_TYPE =CONTENT_TYPE = application/x-www-form-urlencodedCONTENT_LENGTH = 142
Результат работы post-query:Query ResultsYou submitted the following name/value pairs:
- RealName = Петров Иван Сидорович Sex = Мужской Submit = Послать запрос
И на экране браузераQuery ResultsYou submitted the following name/value pairs:RealName = Петров Иван Сидорович Sex = Мужской Submit = Послать запрос
Ниже приведен исходный текст программы post-query.
#include #ifndef NO_STDLIB_H #include #elsechar *getenv(); #endif #define MAX_ENTRIES 10000typedef struct { char *name; char *val; } entry;char *makeword(char *line, char stop); char *fmakeword(FILE *f, char stop, int *len); char x2c(char *what); void unescape_url(char *url); void plustospace(char *str); main(int argc, char *argv[]) { entry entries[MAX_ENTRIES]; register int x,m=0; int cl; printf("Content-type: text/html%c%c",10,10); if(strcmp(getenv("REQUEST_METHOD"),"POST")) { printf("This script should be referenced with a METHOD of POST.\n"); printf("If you don't understand this, see this "); printf(" forms overview.%c",10); exit(1); } if(strcmp(getenv("CONTENT_TYPE"),"application/x-www-form-urlencoded")) {printf("This script can only be used to decode form results. \n"); exit(1); } cl = atoi(getenv("CONTENT_LENGTH")); for(x=0;cl && (!feof(stdin));x++) {m=x;entries[x].val = fmakeword(stdin,'&',&cl); plustospace(entries[x].val); unescape_url(entries[x].val); entries[x].name = makeword(entries[x].val,'='); } printf("Query Results"); printf("You submitted the following name/value pairs:
%c",10); printf("
- %c",10); for(x=0; x = 'A' ? ((what[0] & 0xdf) - 'A')+10 : (what[0] - '0')); digit *= 16; digit += (what[1] >= 'A' ? ((what[1] & 0xdf) - 'A')+10 : (what[1] - '0')); return(digit); }void unescape_url(char *url) {register int x,y;for(x=0,y=0;url[y];++x,++y) { if((url[x] = url[y]) == '%') { url[x] = x2c(&url[y+1]); y+=2; } } url[x] = '\0'; }void plustospace(char *str) { /*замена символов "+" на символ "пробел"*/ register int x;for(x=0;str[x];x++) if(str[x] == '+') str[x] = ' '; }
Для демонстрации реализации формы с методом запроса GET воспользуемся той же самой формой, что и для метода POST и программой query. Для этого изменим значение атрибутов ACTION и METHOD в теге FORM. После инициации формы сервер установит следующие значения для переменных окружения и аргументов командной строки:
argc = 0. argv is = SERVER_SOFTWARE = NCSA/1.5.1 SERVER_NAME = iceman.cnit.nsu.ru GATEWAY_INTERFACE = CGI/1.1 SERVER_PROTOCOL = HTTP/1.0 SERVER_PORT = 80 REQUEST_METHOD = GET HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */* PATH_INFO = PATH_TRANSLATED = SCRIPT_NAME = /cgi-bin/test-cgi QUERY_STRING = RealName=%CF%E5%F2%F0%EE%E2+%C8%E2%E0%ED+%D1%E8 %E4%EE%F0%EE%E2%E8%F7&Sex=%CC%F3%E6%F1%EA%EE%E9&Submit=%CF%EE %F1%EB%E0%F2%FC+%E7%E0%EF%F0%EE%F1 REMOTE_HOST = fwa.cnit.nsu.ru REMOTE_ADDR = 193.124.209.74 REMOTE_USER = AUTH_TYPE = CONTENT_TYPE = CONTENT_LENGTH =
Как мы видим, выходной поток от формы появился в значении переменной QUERY_STRING.
Результат работы query полностью совпадает с результатом работы post-query.
Приложение 1 к гл.4 Конструкции языка HTML для построения форм...
использование: предназначен для получения информации от клиента и определяет начало и конец формы.
атрибуты:
Обязательные ACTION - определяет URI (Universal Resource Identifier-адрес или место расположения документа) CGI-скрипта METHOD - определяет метод передачи информации скрипту. Возможные значения GET или POST.Необязательные [ENCTYPE] - определяет тип MIME декодирования информации (значение этого
Похожие работы
Интересная статья: Быстрое написание курсовой работы

(Назад)
(Cкачать работу)