Документация Python неофициальный перевод

20.20. CGIHTTPServer – обработчик HTTP-запросов с поддержкой CGICGIHTTPServer – 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

Реализация базового класса для веб-сервера и обработчика запросов.