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

Модуль HTTP в Python

HTTP-методы и HTTP-коды ответа в Python

Содержание:

Модуль http - это пакет, собирающий несколько модулей для работы с протоколом передачи гипертекста:

  • http.client - низкоуровневый клиент протокола HTTP. Клиент высокого уровня urllib.request
  • http.server - содержит базовые классы HTTP-серверов на основе socketserver
  • http.cookies - имеет утилиты для реализации управления состоянием с помощью cookies
  • http.cookiejar - обеспечивает сохраняемость cookies

Модуль http также определяет следующие перечисления, которые помогают работать с кодом, связанным с HTTP протоколом:

http.HTTPStatus:

Класс http.HTTPStatus представляет собой подкласс enum.IntEnum, который определяет набор кодов состояния HTTP, причин и длинных описаний на английском языке.

Пример использования:

>>> from http import HTTPStatus
>>> HTTPStatus.OK
# HTTPStatus.OK
>>> HTTPStatus.OK == 200
# True
>>> HTTPStatus.OK.value
# 200
>>> HTTPStatus.OK.phrase
# 'OK'
>>> HTTPStatus.OK.description
# 'Request fulfilled, document follows'
>>> list(HTTPStatus)
# [HTTPStatus.CONTINUE, HTTPStatus.SWITCHING_PROTOCOLS, ...]

Список кодов состояний HTTP, доступных в http.HttpStatus

Поддерживаемые коды состояния, зарегистрированные в IANA, доступны в http.HttpStatus:

Код ответаОписаниеДетали
100CONTINUEHTTP/1.1 RFC 7231, Section 6.2.1
101SWITCHING_PROTOCOLSHTTP/1.1 RFC 7231, Section 6.2.2
102PROCESSINGWebDAV RFC 2518, Section 10.1
103EARLY_HINTSAn HTTP Status Code for Indicating Hints RFC 8297
200OKHTTP/1.1 RFC 7231, Section 6.3.1
201CREATEDHTTP/1.1 RFC 7231, Section 6.3.2
202ACCEPTEDHTTP/1.1 RFC 7231, Section 6.3.3
203NON_AUTHORITATIVE_INFORMATIONHTTP/1.1 RFC 7231, Section 6.3.4
204NO_CONTENTHTTP/1.1 RFC 7231, Section 6.3.5
205RESET_CONTENTHTTP/1.1 RFC 7231, Section 6.3.6
206PARTIAL_CONTENTHTTP/1.1 RFC 7233, Section 4.1
207MULTI_STATUSWebDAV RFC 4918, Section 11.1
208ALREADY_REPORTEDWebDAV Binding Extensions RFC 5842, Section 7.1 (Experimental)
226IM_USEDDelta Encoding in HTTP RFC 3229, Section 10.4.1
300MULTIPLE_CHOICESHTTP/1.1 RFC 7231, Section 6.4.1
301MOVED_PERMANENTLYHTTP/1.1 RFC 7231, Section 6.4.2
302FOUNDHTTP/1.1 RFC 7231, Section 6.4.3
303SEE_OTHERHTTP/1.1 RFC 7231, Section 6.4.4
304NOT_MODIFIEDHTTP/1.1 RFC 7232, Section 4.1
305USE_PROXYHTTP/1.1 RFC 7231, Section 6.4.5
307TEMPORARY_REDIRECTHTTP/1.1 RFC 7231, Section 6.4.7
308PERMANENT_REDIRECTPermanent Redirect RFC 7238, Section 3 (Experimental)
400BAD_REQUESTHTTP/1.1 RFC 7231, Section 6.5.1
401UNAUTHORIZEDHTTP/1.1 Authentication RFC 7235, Section 3.1
402PAYMENT_REQUIREDHTTP/1.1 RFC 7231, Section 6.5.2
403FORBIDDENHTTP/1.1 RFC 7231, Section 6.5.3
404NOT_FOUNDHTTP/1.1 RFC 7231, Section 6.5.4
405METHOD_NOT_ALLOWEDHTTP/1.1 RFC 7231, Section 6.5.5
406NOT_ACCEPTABLEHTTP/1.1 RFC 7231, Section 6.5.6
407PROXY_AUTHENTICATION_REQUIREDHTTP/1.1 Authentication RFC 7235, Section 3.2
408REQUEST_TIMEOUTHTTP/1.1 RFC 7231, Section 6.5.7
409CONFLICTHTTP/1.1 RFC 7231, Section 6.5.8
410GONEHTTP/1.1 RFC 7231, Section 6.5.9
411LENGTH_REQUIREDHTTP/1.1 RFC 7231, Section 6.5.10
412PRECONDITION_FAILEDHTTP/1.1 RFC 7232, Section 4.2
413REQUEST_ENTITY_TOO_LARGEHTTP/1.1 RFC 7231, Section 6.5.11
414REQUEST_URI_TOO_LONGHTTP/1.1 RFC 7231, Section 6.5.12
415UNSUPPORTED_MEDIA_TYPEHTTP/1.1 RFC 7231, Section 6.5.13
416REQUESTED_RANGE_NOT_SATISFIABLEHTTP/1.1 Range Requests RFC 7233, Section 4.4
417EXPECTATION_FAILEDHTTP/1.1 RFC 7231, Section 6.5.14
418IM_A_TEAPOTHTCPCP/1.0 RFC 2324, Section 2.3.2
421MISDIRECTED_REQUESTHTTP/2 RFC 7540, Section 9.1.2
422UNPROCESSABLE_ENTITYWebDAV RFC 4918, Section 11.2
423LOCKEDWebDAV RFC 4918, Section 11.3
424FAILED_DEPENDENCYWebDAV RFC 4918, Section 11.4
425TOO_EARLYUsing Early Data in HTTP RFC 8470
426UPGRADE_REQUIREDHTTP/1.1 RFC 7231, Section 6.5.15
428PRECONDITION_REQUIREDAdditional HTTP Status Codes RFC 6585
429TOO_MANY_REQUESTSAdditional HTTP Status Codes RFC 6585
431REQUEST_HEADER_FIELDS_TOO_LARGEAdditional HTTP Status Codes RFC 6585
451UNAVAILABLE_FOR_LEGAL_REASONSAn HTTP Status Code to Report Legal Obstacles RFC 7725
500INTERNAL_SERVER_ERRORHTTP/1.1 RFC 7231, Section 6.6.1
501NOT_IMPLEMENTEDHTTP/1.1 RFC 7231, Section 6.6.2
502BAD_GATEWAYHTTP/1.1 RFC 7231, Section 6.6.3
503SERVICE_UNAVAILABLEHTTP/1.1 RFC 7231, Section 6.6.4
504GATEWAY_TIMEOUTHTTP/1.1 RFC 7231, Section 6.6.5
505HTTP_VERSION_NOT_SUPPORTEDHTTP/1.1 RFC 7231, Section 6.6.6
506VARIANT_ALSO_NEGOTIATESTransparent Content Negotiation in HTTP RFC 2295, Section 8.1 (Experimental)
507INSUFFICIENT_STORAGEWebDAV RFC 4918, Section 11.5
508LOOP_DETECTEDWebDAV Binding Extensions RFC 5842, Section 7.2 (Experimental)
510NOT_EXTENDEDAn HTTP Extension Framework RFC 2774, Section 7 (Experimental)
511NETWORK_AUTHENTICATION_REQUIREDAdditional HTTP Status Codes RFC 6585, Section 6

Для сохранения обратной совместимости значения enum также присутствуют в модуле http.client в виде констант. Имя enum равно имени константы (т.е. http.HttpStatus.OK также доступен как http.client.OK).

Категории состояния HTTP

Значения enum имеют несколько свойств для указания категории состояния HTTP:

СвойствоИнтервал значенийДетали
is_informational100 <= status <= 199HTTP/1.1 RFC 7231, Section 6
is_success200 <= status <= 299HTTP/1.1 RFC 7231, Section 6
is_redirection300 <= status <= 399HTTP/1.1 RFC 7231, Section 6
is_client_error400 <= status <= 499HTTP/1.1 RFC 7231, Section 6
is_server_error500 <= status <= 599HTTP/1.1 RFC 7231, Section 6

Использование:

>>> from http import HTTPStatus
>>> HTTPStatus.OK.is_success
# True
>>> HTTPStatus.OK.is_client_error
# False

http.HTTPMethod:

Класс http.HTTPMethod представляет собой подкласс enum.StrEnum, который определяет набор HTTP-методов и описаний на английском языке.

Использование:

>>> from http import HTTPMethod
>>> HTTPMethod.GET
# <HTTPMethod.GET>
>>>> HTTPMethod.GET == 'GET'
# True
>>> HTTPMethod.GET.value
# 'GET'
>>> HTTPMethod.GET.description
# 'Retrieve the target.'
>>> list(HTTPMethod)
# [<HTTPMethod.CONNECT>,
#  <HTTPMethod.DELETE>,
#  <HTTPMethod.GET>,
#  <HTTPMethod.HEAD>,
#  <HTTPMethod.OPTIONS>,
#  <HTTPMethod.PATCH>,
#  <HTTPMethod.POST>,
#  <HTTPMethod.PUT>,
#  <HTTPMethod.TRACE>]

Список HTTP-методов доступных в классе http.HttpMethod

Список поддерживаемых, зарегистрированных IANA методов, доступных в http.HttpMethod:

HTTP-методИмя `enum`Детаи
GETGETHTTP/1.1 RFC 7231, Section 4.3.1
HEADHEADHTTP/1.1 RFC 7231, Section 4.3.2
POSTPOSTHTTP/1.1 RFC 7231, Section 4.3.3
PUTPUTHTTP/1.1 RFC 7231, Section 4.3.4
DELETEDELETEHTTP/1.1 RFC 7231, Section 4.3.5
CONNECTCONNECTHTTP/1.1 RFC 7231, Section 4.3.6
OPTIONSOPTIONSHTTP/1.1 RFC 7231, Section 4.3.7
TRACETRACEHTTP/1.1 RFC 7231, Section 4.3.8
PATCHPATCHHTTP/1.1 RFC 5789