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
кортеж формы (host, port)
,BaseHTTPRequestHandler.server
экземпляр сервера,BaseHTTPRequestHandler.close_connection
bool
значение,BaseHTTPRequestHandler.requestline
представление строки HTTP-запроса,BaseHTTPRequestHandler.command
тип запроса,BaseHTTPRequestHandler.path
путь запроса,BaseHTTPRequestHandler.request_version
версия запроса,BaseHTTPRequestHandler.headers
HTTP-заголовки в виде http.client.HTTPMessage
,BaseHTTPRequestHandler.rfile
входной поток готовый к чтению,BaseHTTPRequestHandler.wfile
поток вывода для записи ответа клиенту.http.server.BaseHTTPRequestHandler
:BaseHTTPRequestHandler.server_version
версия ПО сервера,BaseHTTPRequestHandler.sys_version
версия Python,BaseHTTPRequestHandler.error_message_format
строка формата ответа об ошибке клиенту,BaseHTTPRequestHandler.error_content_type
Content-Type
для ответов об ошибках,BaseHTTPRequestHandler.protocol_version
версия HTTP-протокола для ответа,BaseHTTPRequestHandler.MessageClass
класс для HTTP-заголовков,BaseHTTPRequestHandler.responses
словарь кодов ответов с сообщениями,BaseHTTPRequestHandler
:BaseHTTPRequestHandler.handle()
вызывает .handle_one_request()
,BaseHTTPRequestHandler.handle_one_request()
вызывает соответствующий метод .do_*()
,BaseHTTPRequestHandler.handle_expect_100()
получает заголовок Expect: 100-continue,BaseHTTPRequestHandler.send_error()
отправляет ответ об ошибке клиенту,BaseHTTPRequestHandler.send_response()
добавляет ответ в буфер заголовков,BaseHTTPRequestHandler.send_header()
добавляет HTTP-заголовок во внутренний буфер,BaseHTTPRequestHandler.send_response_only()
отправляет только заголовок ответа,BaseHTTPRequestHandler.end_headers()
вызывает метод .flush_headers()
,BaseHTTPRequestHandler.flush_headers()
отправляет заголовки,BaseHTTPRequestHandler.log_request()
регистрирует успешный запрос,BaseHTTPRequestHandler.log_error()
регистрирует ошибку,BaseHTTPRequestHandler.log_message()
записывает произвольное сообщение,BaseHTTPRequestHandler.version_string()
возвращает версию ПО сервера,BaseHTTPRequestHandler.date_time_string()
возвращает дату и время,BaseHTTPRequestHandler.log_date_time_string()
возвращает текущую дату и время,BaseHTTPRequestHandler.address_string()
возвращает адрес клиента.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()
возвращает адрес клиента.