Анимация
JavaScript
|
Главная Библионтека передача информации cgi-сцеиарию Проблема приема параметров, заданных пользователем (с точки зрения сценария - все равно, через форму или вручную), несколько сложнее. Мы уже частично затрагивали ее и знаем, что основная информация приходит через заголовки, а также (при использовании метода post) после всех заголовков. Рассмотрим эти вопросы подробнее. Переменные окружения Непосредственно перед запуском сценария сервер передает ему некие переменные окружения с информацией. В определенных переменных содержатся некоторые заголовки, но, как уже говорилось, не все (получить все заголовки нельзя). Вот список наиболее важных переменных окружения (большинство из них мы уже рассматривали, но сейчас будет полезно повториться и систематизировать весь наш список именно с точки зрения программиста). HTTP ACCEPT В этой переменной перечислены все (во всяком случае, так говорится в документации) MIME-типы данных, которые могут быть восприняты браузером. Как мы уже замечали, современные браузеры частенько ленятся и передают строку */*, что означает, что они якобы понимают любой тип. HTTP REFERER Задает имя документа, в котором находится форма, запустившая CGI-сценарий. Эту переменную окружения можно задействовать, например, для того, чтобы отслеживать перемещение пользователя по вашему сайту (а потом, например, где-нибудь распечатывать статистику самых популярных маршрутов). HTTP USER AGENT Идентифицирует браузер пользователя. Если в данной переменной окружения присутствует подстрока msie, то это - Internet Explorer, в противном случае, если в наличии лишь слово Mozilla, - Netscape. HTTP HOST Доменное имя Web-сервера, на котором запустился сценарий. Эту переменную окружения довольно удобно использовать, например, для генерации полного пути, который требуется в заголовке Location, чтобы не привязываться к конкретному серверу (вообще говоря, чем меньше сценарий задействует "зашитую" в него информацию об имени сервера, на котором он запущен, тем лучше - в идеале ее не должно быть вовсе). SERVER PORT Порт сервера (обгчно 80), к которому обратился браузер пользователя. Также может привлекаться для генерации параметра заголовка Location. REMOTE ADDR Эта переменная окружения задает IP-адрес (или доменное имя) узла пользователя, на котором был запущен браузер. REMOTE PORT Порт, который закрепляется за браузером пользователя для получения ответа сервера. SCRIPT NAME Виртуальное имя выполняющегося сценария (то есть часть URL после имени сервера, но до символа ?). Эту переменную окружения, опять же, очень удобно брать на вооружение при формировании заголовка Location при переадресации на себя (self-redirect), а также при проставлении значения атрибута action тэга <form> на странице, которую выдает сценарий при запуске без параметров (для того чтобы не привязываться к конкретному имени сценария). REQUEST METHOD Метод, который применяет пользователь при передаче данных (мы рассматриваем только GET и POST, хотя существуют и другие методы). Надо заметить, что грамотно составленный сценарий должен сам определять на основе этой переменной, какой метод задействует пользователь, и принимать данные из соответствующего источника, а не рассчитывать, что передача будет осуществляться, например, только методом POST. Впрочем, все PHP-сценарии так и устроены. QUERY STRING Параметры, которые в URL указаны после вопросительного знака. Напомню, что они доступны как при методе get, так и при методе post (если в последнем случае они были определены в атрибуте action тэга <form>). CONTENT LENGTH Количество байтов данных, присланных пользователем. Эту переменную необходимо анализировать, если вы занимаетесь приемом и обработкой POST-формы. i Листинг 3.2. Работа с переменными окружения #include <stdio.h> Включаем функции ввода/в1вода #include <stdlib.h> Включаем функцию getenv() void main(void) { получаем значение переменной окружения REMOTE ADDR char *RemoteAddr = getenv("REMOTE ADDR"); ... и еще QUERY STRING char *QueryString = getenv("QUERY STRING"); печатаем заголовок printf("Content-type: text/html\n\n"); печатаем документ printf("<html><body>"); printf("<h1>Здравствуйте. знаем о вас все!</h1>"); printf("Ваш IP-адрес: %s<br>",RemoteAddr); printf("Вот параметры, которые Вы указали: %s",QueryString); printf("</body></html>"); Откомпилируем сценарий и поместим его в "CGI-каталог". Теперь в адресной строке введем: http: www.myhost.com/cgi-bin/script.cgi?a=1&b=2 Мы получим примерно такой документ: Здравствуйте. знаем о Вас все! Ваш IP-адрес: 192.232.01.23 Вот параметры, которые Вы указали: a=1&b=2 Передача параметров методом GET Тут все просто. Все параметры передаются единой строкой (а именно, точно такой же, какая была задана в URL после ?) в переменной query string. Единственная проблема - то, что все данные поступят URL-кодированными. Так что нам понадобится функция декодирования. Но это отдельная тема, пока мы не будем ее касаться. Для того чтобы узнать значения полученных переменных в Си, нужно воспользоваться функцией getenv() . Вот пример сценария на Си, который это обеспечивает. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [ 15 ] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |