20.20. CGIHTTPServer – обработчик HTTP-запросов с поддержкой CGI¶CGIHTTPServer – CGI-capable HTTP request handler
Примечание
Модуль CGIHTTPServer был объединён с http.server в
Python 3. Инструмент 2to3 автоматически адаптирует импорты при
преобразовании исходного кода в Python 3.
Модуль CGIHTTPServer определяет класс обработчика запросов, интерфейс
совместимый с BaseHTTPServer.BaseHTTPRequestHandler, и наследует
поведение от SimpleHTTPServer.SimpleHTTPRequestHandler, но также может
запускать CGI-скрипты.
Примечание
Этот модуль может запускать CGI-скрипты в системах Unix и Windows.
Примечание
CGI-скрипты, запускаемые классом CGIHTTPRequestHandler, не могут выполнять
перенаправления (HTTP-код 302), поскольку код 200 (вывод скрипта будет отправлен) отправляется
до выполнения CGI-скрипта. Это предотвращает установку другого кода состояния.
Модуль CGIHTTPServer определяет следующий класс:
-
class
CGIHTTPServer.CGIHTTPRequestHandler(request, client_address, server)¶ Этот класс используется для обслуживания как файлов, так и вывода CGI-скриптов из текущего каталога и всех подкаталогов. Обратите внимание, что отображение иерархической структуры HTTP на локальную структуру каталогов в точности такое же, как в
SimpleHTTPServer.SimpleHTTPRequestHandler.Однако класс будет запускать CGI-скрипт вместо его обслуживания как файла, если он определяет его как CGI-скрипт. Используется только CGI на основе каталогов – другая распространенная конфигурация сервера – обрабатывать специальные расширения как обозначающие CGI-скрипты.
Функции
do_GET()иdo_HEAD()изменены таким образом, чтобы запускать CGI-скрипты и выдавать их результат вместо отдачи файлов, если запрос ведёт в каталог, расположенный ниже путиcgi_directories.Класс
CGIHTTPRequestHandlerопределяет следующий элемент данных:-
cgi_directories¶ По умолчанию имеет значение
['/cgi-bin', '/htbin']и описывает каталоги, которые следует считать содержащими CGI-скрипты.
CGIHTTPRequestHandlerопределяет следующие методы:-
do_POST()¶ Этот метод обслуживает запросы типа
'POST', разрешённые только для CGI- скриптов. При попытке выполнить POST на не-CGI URL выводится ошибка 501: «Can only POST to CGI scripts».
-
Обратите внимание, что CGI-скрипты будут запускаться с UID пользователя nobody по соображениям безопасности. Проблемы с CGI-скриптом будут приводить к ошибке 403.
Пример использования см. в реализации функции test().
См. также
- Модуль
BaseHTTPServer Реализация базового класса для веб-сервера и обработчика запросов.