русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Функция GetServerVariable


Дата добавления: 2013-12-23; просмотров: 1074; Нарушение авторских прав


Получение данных расширением ISAPI

Программа CGI получает данные из переменных среды и стандартного потока ввода STDIN (в случае применения метода доступа POST). Расширение ISAPI делает это по-другому.

Функция HttpExtensionProc получает указатель на структуру типа EXTENSION_CONTROL_BLOCK, некоторые поля которой заполняются сервером и должны использоваться для получения входных данных. Прежде всего это поле lpszMethod, через которое передается метод, использованный для посылки данных (GET или POST), поле lpszQueryString, в котором передаются параметры запуска расширения или данные при использовании метода GET, а также другие поля, описанные выше.

Через структуру EXTENSION_CONTROL_BLOCK передаются адреса функций GetServerVariable и ReadClient, специально предназначенных для получения данных от навигатора удаленного пользователя.

Прототип функции GetServerVariable определен в структуре EXTENSION_CONTROL_BLOCK, описанной нами ранее:

BOOL (WINAPI * GetServerVariable)(HCONN hConn, LPSTR lpszVariableName, LPVOID lpvBuffer, LPDWORD lpdwSize);

Через параметр hConn вы должны передать этой функции идентификатор канала, полученный через поле ConnID структуры EXTENSION_CONTROL_BLOCK.

Параметр lpszVariableName должен содержать указатель на строку имени переменной, содержимое которой необходимо получить. Это содержимое будет записано функцией в буфер, адрес которого передается через параметр lpvBuffer, а размер - через параметр lpdwSize.

Ниже мы перечислили возможные значения строк, передаваемых через параметр lpszVariableName:

· AUTH_TYPE

Переменная среды AUTH_TYPE содержит тип идентификации, который применяется сервером.

· HTTP_ACCEPT

В этой переменной перечислены типы данных MIME, которые могут быть приняты навигатором от сервера WWW.

· CONTENT_LENGTH

Количество байт данных, которые расширение ISAPI должно получить от навигатора.



· CONTENT_TYPE

Тип данных, присланных навигатором.

· PATH_INFO

Путь к виртуальному каталогу, в котором находится библиотека DLL расширения ISAPI.

· PATH_TRANSLATED

Физический путь к библиотеки DLL расширения ISAPI.

· QUERY_STRING

Строка параметров, указанная в форме или операторе ссылки <A>. Эта строка указывается после адреса URL библиотеки DLL расширения ISAPI вслед за разделительным символом “?”.

· REMOTE_ADDR

Адрес IP узла, на котором работает навигатор удаленного пользователя.

· REMOTE_HOST

Доменное имя узла, на котором работает навигатор удаленного пользователя. Если эта информация недоступна (например, для узла не определен доменный адрес), то вместо доменного имени указывается адрес IP, как в переменной REMOTE_ADDR.

· REMOTE_USER

Имя пользователя, которое используется навигатором для аутентификации.

· UNMAPPED_REMOTE_USER

Имя пользователя до обработки фильтром ISAPI, которое используется навигатором для аутентификации.

· REQUEST_METHOD

Метод доступа, который используется для передачи данных от навигатора серверу WWW.

· SCRIPT_NAME

В эту переменную записывается путь к виртуальному каталогу и имя библиотеки DLL расширения ISAPI. Анализируя эту переменную, расширение ISAPI может определить путь к своему загрузочному файлу.

· SERVER_NAME

Доменное имя сервера WWW или адрес IP сервера WWW, если доменное имя недоступно или не определено.

· SERVER_PROTOCOL

Имя и версия протокола, который применяется для выполнения запроса к расширению ISAPI.

· SERVER_PORT

Номер порта, на котором навигатор посылает запросы серверу WWW.

· SERVER_PORT_SECURE

Если обработка запроса выполняется через защищенный порт, в этой строке записано значение 1, а если через незащищенный - значение 0.

· SERVER_SOFTWARE

Название и версия программного обеспечения сервера WWW. Версия следует после названия и отделяется от последнего символом “/”.

· ALL_HTTP

Строка, закрытая двоичным нулем, в которую записаны значения всех переменных, имеющих отношение к протоколу HTTP. Это, например, такие переменные как HTTP_ACCEPT, HTTP_CONNECTION, HTTP_USER_AGENT и так далее.

Извлекать содержимое отдельных переменных ваша программа должна самостоятельно. При этом следует учесть, что названия переменных отделены от их значений символом двоеточия “:”, а поля переменных разделены символом перевода строки.

Обратите внимание, что названия этих строк почти совпадают с названиями переменных среды, создаваемых для программ CGI, однако совпадение все же не полное.

В случае успешного завершения функция GetServerVariable возвращает значение TRUE, а при возникновении ошибки - значение FALSE. Код ошибки можно определить с помощью функции GetLastError, вызвав ее сразу после функции GetServerVariable. Эта функция может вернуть в данном случае следующие коды ошибок:

Код ошибки Описание
ERROR_INVALID_INDEX Неправильное имя переменной, передаваемой через параметр lpszVariableName
ERROR_INVALID_PARAMETER Неправильное значение параметра hConn
ERROR_INSUFFICIENT_BUFFER Буфер, адрес которого указан с помощью параметра lpvBuffer, слишком мал. Необходимый размер буфера записывается по адресу, который был передан функции через параметр lpdwSize
ERROR_MORE_DATA Буфер, адрес которого указан с помощью параметра lpvBuffer, слишком мал. В результате данные были прочитаны частично, причем размер буфера, необходимый для чтения всех данных, неизвестен
ERROR_NO_DATA Данные не были получены

Ниже мы привели пример использования функции GetServerVariable для получения содержимого переменной с именем ALL_HTTP в буфер szTempBuf.

CHAR szTempBuf[4096];DWORD dwSize;dwSize = 4096; lpECB->GetServerVariable(lpECB->ConnID, (LPSTR)"ALL_HTTP", (LPVOID)szTempBuf, &dwSize); strcat(szBuff, szTempBuf);


<== предыдущая лекция | следующая лекция ==>
Функция HttpExtensionProc | Функция ReadClient


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.016 сек.