Приложение common Gateway Interface (CGI) может быть написано на любом языке программирования, который может получить доступ как к переменным среды, так и к STDIN или STDOUT. Из-за мощной возможности обработки текста языка программирования Visual Basic многие веб-разработчики хотят писать программы CGI в Visual Basic. В этой статье показаны методы написания приложений CGI в Visual Basic и представлен простой пример CGI Visual Basic.
Дополнительные сведения
Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Специалисты технической поддержки Майкрософт могут пояснить работу той или иной процедуры, но модификация примеров и их адаптация к задачам разработчика не предусмотрена.
Как создавать VFX эффекты БЕЗ СТРАДАНИЙ? Секреты создания ГОЛЛИВУДСКОЙ ГРАФИКИ и КОМПОЗИТИНГА
Получение переменных среды
Чтобы получить переменную среды, используйте функцию Environ$ в Visual Basic следующим образом:
VALUE = Environ$(NAME)
NAME — это переменная среды, которую требуется извлечь. Его значение возвращается в VALUE .
Чтение из STDIN и запись в STDOUT
Используйте функцию Win32 ReadFile для чтения и STDIN WriteFile функцию для записи в STDOUT . Эти функции требуют предоставления дескриптора для или STDIN STDOUT . Функцию можно использовать GetStdHandle для получения дескриптора в или STDOUT STDIN . В этой статье псевдоним используется для GetStdHandle функции для упрощения вызовов функции. Ниже приведены объявления для этих функций.
Public Declare Function stdin Lib «kernel32» Alias «GetStdHandle» _ (Optional ByVal Handletype As Long = STD_INPUT_HANDLE) As Long Public Declare Function stdout Lib «kernel32» Alias «GetStdHandle» _ (Optional ByVal Handletype As Long = STD_OUTPUT_HANDLE) As Long Public Declare Function ReadFile Lib «kernel32″ _ (ByVal hFile As Long, ByVal lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, _ lpNumberOfBytesRead As Long, Optional ByVal lpOverlapped As Long = 0kernel32″ _ (ByVal hFile As Long, ByVal lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, _ lpNumberOfBytesWritten As Long, Optional ByVal lpOverlapped As Long = 0 Public Const STD_OUTPUT_HANDLE = -11 Public Const STD_OUTPUT_HANDLE = -11AUTH_TYPE» Public Const CGI_CONTENT_LENGTH As String = «CONTENT_LENGTH» Public Const CGI_CONTENT_TYPE As String = «CONTENT_TYPE» Public Const CGI_GATEWAY_INTERFACE As String = «GATEWAY_INTERFACE» Public Const CGI_HTTP_ACCEPT As String = «HTTP_ACCEPT» Public Const CGI_HTTP_REFERER As String = «HTTP_REFERER» Public Const CGI_HTTP_USER_AGENT As String = «HTTP_USER_AGENT» Public Const CGI_PATH_INFO As String = «PATH_INFO» Public Const CGI_PATH_TRANSLATED As String = «PATH_TRANSLATED» Public Const CGI_QUERY_STRING As String = «QUERY_STRING» Public Const CGI_REMOTE_ADDR As String = «REMOTE_ADDR» Public Const CGI_REMOTE_HOST As String = «REMOTE_HOST» Public Const CGI_REMOTE_USER As String = «REMOTE_USER» Public Const CGI_REQUEST_METHOD As String = «REQUEST_METHOD» Public Const CGI_SCRIPT_NAME As String = «SCRIPT_NAME» Public Const CGI_SERVER_NAME As String = «SERVER_NAME» Public Const CGI_SERVER_PORT As String = «SERVER_PORT» Public Const CGI_SERVER_PROTOCOL As String = «SERVER_PROTOCOL» Public Const CGI_SERVER_SOFTWARE As String = «SERVER_SOFTWARE» Public Declare Function Sleep Lib «kernel32» _ (ByVal dwMilliseconds As Long) As Long Public Declare Function stdin Lib «kernel32» Alias «GetStdHandle» _ (Optional ByVal Handletype As Long = STD_INPUT_HANDLE) As Long Public Declare Function stdout Lib «kernel32» Alias «GetStdHandle» _ (Optional ByVal Handletype As Long = STD_OUTPUT_HANDLE) As Long Public Declare Function ReadFile Lib «kernel32″ _ (ByVal hFile As Long, ByVal lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, _ lpNumberOfBytesRead As Long, Optional ByVal lpOverlapped As Long = 0kernel32″ _ (ByVal hFile As Long, ByVal lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, _ lpNumberOfBytesWritten As Long, Optional ByVal lpOverlapped As Long = 0=») sReadBuffer = Mid$(sReadBuffer, iPos + 1)’ Construct and send response to the client sWriteBuffer = «HTTP/1.0 200 OK» «Content-Type: text/html» vbCrLf Hello » hStdOut = stdout() WriteFile hStdOut, sWriteBuffer, Len(sWriteBuffer) + 1, lBytesWritten WriteFile hStdOut, sReadBuffer, Len(sReadBuffer), lBytesWritten End Sub
HtmL-форма для тестирования CGI (Test.htm)
С ЧЕГО НАЧАТЬ ИЗУЧЕНИЕ 3D | CGI
Testing VB CGI Name
Действия по сборке CGI Hello.exe файла:
- Создайте новый проект в качестве стандартного .exe проекта.
- Удаление формы из проекта.
- Добавьте модуль в проект и приведите к проекту имя HELLO.
- Задайте Sub Main в качестве запуска объекта (в разделе «Свойства проекта»).
- Скопируйте приведенный выше код Visual Basic и вставьте его в модуль.
- Сделайте Hello.exe.
- В примере кода показано, как обрабатывать HTTP-запрос POST . Для обработки запроса GET приложению CGI необходимо получить переменную QUERY_STRING среды. Переменная QUERY_STRING содержит пары «имя-значение», разделенные в Color=Red . Используется кодирование URL-адресов, все пробелы преобразуются в +, а все специальные символы, такие как ! преобразуются в значения HEX ASCII. Другими словами, строка «Hello, World!» представлена как «Hello,+World%21». В приложениях CGI Visual Basic необходимо реализовать весь код анализа.
- Так как приложение CGI запускается службой, оно может не иметь доступа к общим сетевым ресурсам.
- Имейте в виду, что CGI работает как служба, которая взаимодействует с сервером. Поэтому формы, элементы управления и поля сообщений визуального интерфейса совершенно не имеют смысла. По сути, окно сообщения приведет к тому, что приложение CGI перестает отвечать.
- Обработка ошибок должна выполняться в коде CGI в Visual Basic, чтобы не отображало окно сообщения об ошибке по умолчанию. Вы можете записывать сообщения об ошибках на сервере или записывать их в браузер пользователя.
- Отладчики Visual C могут выполнять отладку приложений, написанных на Языке Visual Basic. Таким образом, можно использовать описанные ниже методы отладки CGI. Чтобы отладить приложение Visual Basic с помощью Visual C, выберите «Компилировать в машинный код», а затем выберите «Создать символьную отладочную информацию и без оптимизации». После завершения и создания .exe Visual C может подключиться к работающему приложению CGI, написанному на Visual Basic.
- Чтобы протестировать приложение CGI, скопируйте его в виртуальный каталог IIS с разрешениями на выполнение.
- Имейте в виду, что ошибки или диалоговые окна среды выполнения в коде Visual Basic могут привести к тому, что приложение CGI перестает отвечать. Если приложение CGI перестает отвечать, его можно запустить в отладчике Visual Studio.
Ссылки
- RFC 2068, протокол передачи гипертекстов
- RFC 1738, универсальные указатели ресурсов (URL-адрес)
Источник: learn.microsoft.com
Perl и CGI-программы – особенности использования
Что такое CGI и PERL
Важно понимать, что CGI – не язык программирования, а протокол передачи данных веб-серверу через stdin и их прием из stdout. В качестве обработчика команд используется любая программа с поддержкой функций потокового ввода-вывода. Например, написанная на языке Perl. Главное, что от скрипта требуется «умение» заполнять таблицы в базе данных и получать данные из них путем подачи запроса, чего никогда не сделать средствами HTML.
Особенности применения языка Perl:
- Подходит для парсинга текстовых данных в справочных системах.
- Он удобен при обработке массивов непонятных данных в БД веб-ресурсов.
- Требуется вывод информации на экран, в файл или график на сайте.
В качестве альтернативы Perl все чаще применяется язык программирования Python, но администраторы «старой закалки» продолжают придерживаться классики создания CGI-скриптов, так как поддержка Perl «по умолчанию» имеется в большинстве дистрибутивов Linux. Поэтому программы на нем начинают работать без предварительной подготовки сервера. Формально же скрипты можно писать на чем угодно – хоть на C/C++, Pascal, Java или Visual Basic.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Использование готовых скриптов
Если CGI-скрипт уже готов (используется стандартный модуль), перед использованием его нужно скопировать на сервер хостинга. Выполняется процедура при помощи файлового менеджера в панели управления или через FTP-доступ, например программой FileZilla. Выбор расположения остается на усмотрение пользователя; к программе можно обращаться независимо от имени каталога или подкаталога, но рекомендуется придерживаться определенных стандартов.
Так, внутри скриптов обязательно указывается путь к интерпретатору используемой платформы для программирования:
- Perl – /usr/bin/perl.
- Python – /usr/local/bin/python.
Если здесь допустить ошибку, программный код исполнятся не будет. То же происходит, если в ПО предусмотрено обращение к базе данных MySQL – пользователю понадобится внести в программу путь к ней, логин и пароль доступа. При изменении последнего корректировка CGI-скрипта обязательна, иначе он перестанет работать. Местоположение файлов в популярных CMS выясняется в службе технической поддержки или в служебной документации.
Написание простейшего CGI-скрипта
При работе в среде операционной системы Windows для написания кода понадобится специальная программа. Например, подойдет специализированный текстовый редактор Notepad++ (стандартный Блокнот для таких целей не подходит). Сам код строится вокруг переменных окружения и потоков ввода-вывода информации. По сути, CGI-скрипты являются обработчиками отдельных команд и не являются «полноценной» программой.
- Стандартный поток ввода (stdin) – скрипт получает информацию с клавиатуры, сокета, из локального (удаленного) файла или из результатов работы основной программы.
- Переменные окружения (Environment Variables) – переменные, требуемые при выполнении кода скрипта. Определяются пользователем или сервером.
- Стандартный поток вывода (stdout) – означает вывод на экран результатов вычислений или их сохранение в файл, передача в сокет, входной поток другой программы или на принтер.
Главное, избегать использования SHELL, который снижает безопасность сайта. В качестве примера простейшего CGI-скрипта приведем код для вывода текущей даты и команду HTML, при помощи которой будет происходить обращение к программе (из любой части страницы, хоть в нескольких местах одновременно).
#!/bin/sh echo Content-type: text/html echo echo «
Today is » date echo «
»
При помощи специального виджета, установленного в CMS, или путем ручного редактирования шаблона в нужный участок HTML вставляется код:
В приведенном примере решена типовая ошибка новичков. Она заключается в отсутствии метки о типе выводимого результата (строка Content-type: text/html). После нее располагается пустая строка для указания, что следом идет непосредственно программный код.
Просмотр установленных модулей PERL
Проверить ранее подключенные PERL-модули можно командой vim. Перед ее вводом необходимо подключиться к серверу хостинга по защищенному каналу SSH. После авторизации нужно ввести в консоли:
vim modules.pl
В результате будет создан файл с указанным названием. Следующий шаг – открыть его в текстовом редакторе и изменить содержимое на следующий код:
#!/usr/bin/perl -w use ExtUtils::Installed; $installed = ExtUtils::Installed->new(); foreach $module ($installed->modules())< printf «Module: %sttVersion: %sn», $module, $installed->version($module); >
Выйти из файла с сохранением и запустить его на исполнение можно командой perl ./modules.pl. Процедура по поиску подключенных CGI-скриптов востребована, еслина сайте возникают ошибки 403 или 500. Первая появляется из-за некорректной настройки прав доступа (необходимо установить на файлах скриптов доступ 755), вторая же происходит из-за сбоя транслятора Perl или из-за синтаксической/логической ошибки в самом коде. В любом случае сначала нужно убедиться в том, что скрипт подключен.
Источник: timeweb.com
СGI-программирование
Если в течение последних нескольких лет вы не сидели взаперти в деревянной хижине без злектричества, то вы наверняка слышали о World Wide Web. Web-адреса (больше известные как URL) сейчас можно найти везде: на рекламних плакатах и в титрах кинофильмов, на обложках журна-лов и на страницах других изданий, от газет до правительственных отчетов.
Многие из самых интересных Web-страниц включают разного рода формы, предназначенные для ввода данных пользователем. Вы вводите данные в такую форму и щелкаете на кнопке или рисунке. Зто действие запускает некую программу на Web-сервере, которая изучает введенные вами данные и генерирует новую выходную информацию. Иногда зта программа (широко известная как программа общего шлюзового интерфейса, или CGI-программа) представляет собой просто интерфейс к существующей базе данных; она преобразует введенные вами данные в нечто понятное для зтой базы данных, а выходную информацию базы данных — в нечто понятное для Web-броузера (обычно в HTML-форме).
CGI-программы не просто обрабатывают данные, введенные в форму. Они вызываются и тогда, когда вы щелкаете на графическом изображении, и фактически могут использоваться для отображения всего того, что «видит» ваш броузер. Web-страницы с CGI-поддержкой — зто не безликие и нудньге документы, а удивительно живые страницы с динамически изменяющимся содержимым. Именно динамическая информация делает Web интересньш и интерактивным источником информации, а не просто средством, предна-значенньш для чтения книги с терминала.
Независимо от того, во что вас, возможно, заставят поверить все зти отскакивающие шарики и прыгающие обьявления, Web содержит также большой обіем текста. Поскольку мы имеем дело с текстом, файлами, сетевыми коммуникациями и в некоторой степени с двоичными данными, то Perl идеально подходит для Web-программирования.
В зтой главе мы не только изучим основы CGI-программирования, но и параллельно получим определенные начальные сведения о гипертекстовых ссылках, библиотечных модулях и обьектно-ориентированном программи-ровании на Perl. В конце главы мы дадим начальные сведения о применении Perl для других видов Web-программирования.
Если рассматривать зту главу как отдельное пособие, следует отметить, что ее (как и любого другого документа обьемом меньше пары сотен страниц) недостаточно для изучения более сложных тем, затронутых здесь, в частности обьектно-ориентированного программирования и методов использования различных типов ссылок и запросов в WWW. Однако, будучи средством всего лишь предварительного ознакомления с тем, что вас ждет, представленные здесь примеры и пояснення к ним, возможно, побудят вас подробнее ознакомиться с затронутыми темами и дадут вам ориентиры для выбора соответствующих учебников. А если вы любите учиться на практико, они помогут вам сразу написать некоторые полезные программы на основе тех моделей, которые здесь представлены.