Сообщить об ошибке.

Класс BaseHTTPRequestHandler() модуля http.server в Python

Обработчик HTTP-запросов, поступающих на сервер

Синтаксис:

import http.server

http.server.BaseHTTPRequestHandler(request, client_address, server)

Параметры:

  • request - запрос,
  • client_address - кортеж формы (host, port),
  • server - экземпляр сервера.

Возвращаемое значение:

  • объект BaseHTTPRequestHandler

Описание:

Класс BaseHTTPRequestHandler() модуля http.server используется для обработки HTTP-запросов, поступающих на сервер.

Сам по себе он не может отвечать ни на какие реальные HTTP-запросы. Он должен быть подклассом для обработки каждого метода запроса (например, GET или POST). BaseHTTPRequestHandler предоставляет ряд переменных класса и экземпляра, а также методов для использования подклассами.

Обработчик проанализирует запрос и заголовки, а затем вызовет метод, соответствующий типу запроса. Имя метода строится из запроса. Например, для метода запроса SPAM будет вызываться метод do_SPAM() без аргументов. Вся соответствующая информация хранится в переменных экземпляра обработчика.

Подклассам не нужно переопределять или расширять метод __init__().

Объект BaseHTTPRequestHandler.


Переменные экземпляра http.server.BaseHTTPRequestHandler

BaseHTTPRequestHandler.client_address:

Переменная BaseHTTPRequestHandler.client_address содержит кортеж формы (host, port), относящийся к адресу клиента.

BaseHTTPRequestHandler.server:

Переменная BaseHTTPRequestHandler.server содержит экземпляр сервера.

BaseHTTPRequestHandler.close_connection:

Переменная BaseHTTPRequestHandler.close_connection это bool значение, которое должно быть установлено перед возвратом handle_one_request(), указывая, можно ли ожидать другого запроса или нужно ли закрыть соединение.

BaseHTTPRequestHandler.requestline:

Переменная BaseHTTPRequestHandler.requestline cодержит представление строки HTTP-запроса. Завершающий CRLF удаляется.

Этот атрибут должен быть установлен handle_one_request(). Если действительная строка запроса не была обработана, то она должна быть установлена ​​как пустая строка.

BaseHTTPRequestHandler.command:

Переменная BaseHTTPRequestHandler.command cодержит команду (тип запроса). Например, 'GET'.

BaseHTTPRequestHandler.path:

Переменная BaseHTTPRequestHandler.path cодержит путь запроса.

BaseHTTPRequestHandler.request_version:

Переменная BaseHTTPRequestHandler.request_version cодержит строку версии из запроса. Например, 'HTTP/1.0'.

BaseHTTPRequestHandler.headers:

Переменная BaseHTTPRequestHandler.headers cодержит экземпляр класса, указанного переменной класса MessageClass. Этот экземпляр анализирует заголовки в HTTP-запросе и управляет ими.

Функция parse_headers() из модуля http.client используется для анализа заголовков и требует, чтобы HTTP-запрос предоставлял допустимый заголовок в стиле RFC 2822.

BaseHTTPRequestHandler.rfile:

Переменная BaseHTTPRequestHandler.rfile cодержит входной поток io.BufferedIOBase, готовый к чтению с начала дополнительных входных данных.

BaseHTTPRequestHandler.wfile:

Переменная BaseHTTPRequestHandler.wfile cодержит поток вывода для обратной записи ответа клиенту. При записи в этот поток необходимо использовать надлежащее соблюдение протокола HTTP, чтобы добиться успешного взаимодействия с клиентами HTTP.

Изменено в Python 3.6: это поток io.BufferedIOBase.

Атрибуты класса http.server.BaseHTTPRequestHandler:

BaseHTTPRequestHandler.server_version:

Атрибут BaseHTTPRequestHandler.server_version задает версию программного обеспечения сервера. Этот атрибут можно изменить.

Формат - несколько строк, разделенных пробелами, где каждая строка имеет форму name[/version]. Например, 'BaseHTTP/0.2'.

BaseHTTPRequestHandler.sys_version:

Атрибут BaseHTTPRequestHandler.sys_version cодержит версию системы Python в форме, которую можно использовать с помощью метода version_string() и переменной класса server_version. Например, 'Python/3.8'.

BaseHTTPRequestHandler.error_message_format:

Атрибут BaseHTTPRequestHandler.error_message_format задает строку формата, которая должна использоваться методом send_error() для создания ответа об ошибке клиенту.

По умолчанию строка заполняется переменными из ответов .responses на основе кода состояния, переданного в send_error().

BaseHTTPRequestHandler.error_content_type:

Атрибут BaseHTTPRequestHandler.error_content_type задает HTTP-заголовок 'Content-Type' для ответов об ошибках, отправляемых клиенту. Значение по умолчанию - 'text/html'.

BaseHTTPRequestHandler.protocol_version:

Атрибут BaseHTTPRequestHandler.protocol_version указывает версию HTTP-протокола, используемую в ответах.

Если установлено значение 'HTTP/1.1', то сервер будет разрешать постоянные соединения HTTP. Затем сервер, должен включать точный заголовок 'Content-Length' (используя метод send_header()) во все свои ответы клиентам.

Для обратной совместимости значение по умолчанию - 'HTTP/1.0'.

BaseHTTPRequestHandler.MessageClass:

Атрибут BaseHTTPRequestHandler.MessageClass задает класс, похожий на email.message.Message, для анализа HTTP-заголовков. По умолчанию используется http.client.HTTPMessage.

BaseHTTPRequestHandler.responses:

Атрибут BaseHTTPRequestHandler.responses содержит отображение/словарь целых чисел кода ошибки на двухэлементные кортежи, содержащие короткое и длинное сообщение.

Например, {code: (short_message, long_message)}. Короткое сообщение обычно используется как ключ сообщения в ответе об ошибке, а длинное сообщение как ключ объяснения. Он используется методами send_response_only() и send_error().

Методы экземпляр BaseHTTPRequestHandler:

BaseHTTPRequestHandler.handle():

Метод BaseHTTPRequestHandler.handle() вызывает handle_one_request() один раз (или, если включены постоянные соединения, несколько раз) для обработки входящих HTTP-запросов.

Пользователям никогда не нужно будет переопределять его, вместо этого реализуйте соответствующие методы do_*(), например .do_GET() или .do_POST().

BaseHTTPRequestHandler.handle_one_request():

Этот метод BaseHTTPRequestHandler.handle_one_request() проанализирует и отправит запрос соответствующему методу do_*(), например .do_POST()

Пользователям никогда не нужно будет переопределять его.

BaseHTTPRequestHandler.handle_expect_100():

Когда сервер, совместимый с HTTP/1.1, получает заголовок запроса Expect: 100-continue, он отвечает 100 Continue с последующими заголовками 200 OK.

Метод BaseHTTPRequestHandler.handle_expect_100() можно переопределить, для вызова ошибки, если сервер не хочет, чтобы клиент продолжал работу. Например, сервер может выбрать отправку 417 Expectation Failed в качестве заголовка ответа и вернуть False.

BaseHTTPRequestHandler.send_error(code, message=None, explain=None):

Метод BaseHTTPRequestHandler.send_error() отправляет и регистрирует полный ответ об ошибке клиенту.

Числовой код code указывает код ошибки HTTP с сообщением в качестве необязательного краткого, удобочитаемого описания ошибки message.

Аргумент explain может использоваться для предоставления более подробной информации об ошибке. Он будет отформатирован с использованием атрибута .error_message_format и передан после полного набора заголовков в качестве тела ответа.

Атрибут .responses содержит значения по умолчанию для сообщения и поясняет, что будет использоваться, если значение не указано. Для неизвестных кодов значением по умолчанию для обоих является строка '???'. Тело будет пустым, если используется метод HEAD или один из следующих кодов ответа: 1xx, 204 No Content, 205 Reset Content, 304 Not Modified.

BaseHTTPRequestHandler.send_response(code, message=None):

Метод BaseHTTPRequestHandler.send_response() добавляет заголовок ответа в буфер заголовков и регистрирует принятый запрос.

Строка ответа HTTP записывается во внутренний буфер, за ней следуют заголовки 'Server' и 'Date'. Значения этих двух заголовков берутся из методов .version_string() и .date_time_string() соответственно.

Если сервер не намеревается отправлять какие-либо другие заголовки с помощью метода .send_header(), то после .send_response() должен следовать вызов .end_headers().

BaseHTTPRequestHandler.send_header(keyword, value):

Метод BaseHTTPRequestHandler.send_header() добавляет HTTP-заголовок во внутренний буфер, который будет записан в выходной поток при вызове .end_headers() или .flush_headers().

Аргумент keyword должно указывать ключевое слово заголовка с value, определяющим его значение. Обратите внимание, что после того, как выполнены все вызовы .send_header(), для завершения операции ДОЛЖЕН БЫТЬ вызван метод .end_headers().

BaseHTTPRequestHandler.send_response_only(code, message=None):

Метод BaseHTTPRequestHandler.send_response_only() отправляет только заголовок ответа, используемый для целей, когда сервер отправляет клиенту ответ 100 Continue.

Заголовки не буферизуются и отправляются напрямую в выходной поток. Если сообщение не указано, отправляется HTTP-сообщение, соответствующее коду ответа.

BaseHTTPRequestHandler.end_headers():

Метод BaseHTTPRequestHandler.end_headers() добавляет пустую строку (обозначающую конец заголовков HTTP в ответе) в буфер заголовков и вызывает метод .flush_headers().

BaseHTTPRequestHandler.flush_headers():

Метод BaseHTTPRequestHandler.flush_headers() отправляет заголовки в выходной поток и очищает внутренний буфер заголовков.

BaseHTTPRequestHandler.log_request(code='-', size='-'):

Метод BaseHTTPRequestHandler.log_request() регистрирует принятый (успешный) запрос.

Аргумент code должен указывать числовой код HTTP, связанный с ответом. Если доступен размер ответа, то его следует передать как аргумент size.

BaseHTTPRequestHandler.log_error(format, ...):

Метод BaseHTTPRequestHandler.log_error() регистрирует ошибку, когда запрос не может быть выполнен. По умолчанию он передает сообщение в [.log_message()](#BaseHTTPRequestHandler.log_message), поэтому принимает те же аргументы (format` и дополнительные значения).

BaseHTTPRequestHandler.log_message(format, ...):

Метод BaseHTTPRequestHandler.log_message() записывает произвольное сообщение в sys.stderr. Обычно метод переопределяется для создания настраиваемых механизмов регистрации ошибок.

Аргумент format - это стандартная строка формата в стиле printf, где дополнительные аргументы ... для метода .log_message() применяются в качестве входных данных для форматирования.

К каждому зарегистрированному сообщению добавляются IP-адрес клиента, а также текущая дата и время.

BaseHTTPRequestHandler.version_string():

Метод BaseHTTPRequestHandler.version_string() возвращает строку версии программного обеспечения сервера. Это комбинация атрибутов .server_version и .sys_version.

BaseHTTPRequestHandler.date_time_string(timestamp=None):

Метод BaseHTTPRequestHandler.date_time_string() возвращает дату и время, заданные меткой времени timestamp (которая должна быть None или в формате, возвращаемом time.time()), отформатированными для заголовка сообщения.

Если метка времени не указана, используются текущие дата и время. Результат выглядит так: 'Sun, 07 Feb 2021 08:49:37 GMT'.

BaseHTTPRequestHandler.log_date_time_string():

Метод BaseHTTPRequestHandler.log_date_time_string() возвращает текущую дату и время, отформатированные для ведения журнала.

BaseHTTPRequestHandler.address_string():

Метод BaseHTTPRequestHandler.address_string() возвращает адрес клиента.