21.11. http — HTTP modules¶
http is a package that collects several modules for working with the HyperText Transfer Protocol:
- http.client is a low-level HTTP protocol client; for high-level URL opening use urllib.request
- http.server contains basic HTTP server classes based on socketserver
- http.cookies has utilities for implementing state management with cookies
- http.cookiejar provides persistence of cookies
http is also a module that defines a number of HTTP status codes and associated messages through the http.HTTPStatus enum:
A subclass of enum.IntEnum that defines a set of HTTP status codes, reason phrases and long descriptions written in English.
>>> from http import HTTPStatus >>> HTTPStatus.OK >>> HTTPStatus.OK == 200 True >>> http.HTTPStatus.OK.value 200 >>> HTTPStatus.OK.phrase 'OK' >>> HTTPStatus.OK.description 'Request fulfilled, document follows' >>> list(HTTPStatus) [, , . ]
21.11.1. HTTP status codes¶
Supported, IANA-registered status codes available in http.HTTPStatus are:
Code | Enum Name | Details |
---|---|---|
100 | CONTINUE | HTTP/1.1 RFC 7231, Section 6.2.1 |
101 | SWITCHING_PROTOCOLS | HTTP/1.1 RFC 7231, Section 6.2.2 |
102 | PROCESSING | WebDAV RFC 2518, Section 10.1 |
200 | OK | HTTP/1.1 RFC 7231, Section 6.3.1 |
201 | CREATED | HTTP/1.1 RFC 7231, Section 6.3.2 |
202 | ACCEPTED | HTTP/1.1 RFC 7231, Section 6.3.3 |
203 | NON_AUTHORITATIVE_INFORMATION | HTTP/1.1 RFC 7231, Section 6.3.4 |
204 | NO_CONTENT | HTTP/1.1 RFC 7231, Section 6.3.5 |
205 | RESET_CONTENT | HTTP/1.1 RFC 7231, Section 6.3.6 |
206 | PARTIAL_CONTENT | HTTP/1.1 RFC 7233, Section 4.1 |
207 | MULTI_STATUS | WebDAV RFC 4918, Section 11.1 |
208 | ALREADY_REPORTED | WebDAV Binding Extensions RFC 5842, Section 7.1 (Experimental) |
226 | IM_USED | Delta Encoding in HTTP RFC 3229, Section 10.4.1 |
300 | MULTIPLE_CHOICES | HTTP/1.1 RFC 7231, Section 6.4.1 |
301 | MOVED_PERMANENTLY | HTTP/1.1 RFC 7231, Section 6.4.2 |
302 | FOUND | HTTP/1.1 RFC 7231, Section 6.4.3 |
303 | SEE_OTHER | HTTP/1.1 RFC 7231, Section 6.4.4 |
304 | NOT_MODIFIED | HTTP/1.1 RFC 7232, Section 4.1 |
305 | USE_PROXY | HTTP/1.1 RFC 7231, Section 6.4.5 |
307 | TEMPORARY_REDIRECT | HTTP/1.1 RFC 7231, Section 6.4.7 |
308 | PERMANENT_REDIRECT | Permanent Redirect RFC 7238, Section 3 (Experimental) |
400 | BAD_REQUEST | HTTP/1.1 RFC 7231, Section 6.5.1 |
401 | UNAUTHORIZED | HTTP/1.1 Authentication RFC 7235, Section 3.1 |
402 | PAYMENT_REQUIRED | HTTP/1.1 RFC 7231, Section 6.5.2 |
403 | FORBIDDEN | HTTP/1.1 RFC 7231, Section 6.5.3 |
404 | NOT_FOUND | HTTP/1.1 RFC 7231, Section 6.5.4 |
405 | METHOD_NOT_ALLOWED | HTTP/1.1 RFC 7231, Section 6.5.5 |
406 | NOT_ACCEPTABLE | HTTP/1.1 RFC 7231, Section 6.5.6 |
407 | PROXY_AUTHENTICATION_REQUIRED | HTTP/1.1 Authentication RFC 7235, Section 3.2 |
408 | REQUEST_TIMEOUT | HTTP/1.1 RFC 7231, Section 6.5.7 |
409 | CONFLICT | HTTP/1.1 RFC 7231, Section 6.5.8 |
410 | GONE | HTTP/1.1 RFC 7231, Section 6.5.9 |
411 | LENGTH_REQUIRED | HTTP/1.1 RFC 7231, Section 6.5.10 |
412 | PRECONDITION_FAILED | HTTP/1.1 RFC 7232, Section 4.2 |
413 | REQUEST_ENTITY_TOO_LARGE | HTTP/1.1 RFC 7231, Section 6.5.11 |
414 | REQUEST_URI_TOO_LONG | HTTP/1.1 RFC 7231, Section 6.5.12 |
415 | UNSUPPORTED_MEDIA_TYPE | HTTP/1.1 RFC 7231, Section 6.5.13 |
416 | REQUEST_RANGE_NOT_SATISFIABLE | HTTP/1.1 Range Requests RFC 7233, Section 4.4 |
417 | EXPECTATION_FAILED | HTTP/1.1 RFC 7231, Section 6.5.14 |
421 | MISDIRECTED_REQUEST | HTTP/2 RFC 7540, Section 9.1.2 |
422 | UNPROCESSABLE_ENTITY | WebDAV RFC 4918, Section 11.2 |
423 | LOCKED | WebDAV RFC 4918, Section 11.3 |
424 | FAILED_DEPENDENCY | WebDAV RFC 4918, Section 11.4 |
426 | UPGRADE_REQUIRED | HTTP/1.1 RFC 7231, Section 6.5.15 |
428 | PRECONDITION_REQUIRED | Additional HTTP Status Codes RFC 6585 |
429 | TOO_MANY_REQUESTS | Additional HTTP Status Codes RFC 6585 |
431 | REQUEST_HEADER_FIELDS_TOO_LARGE | Additional HTTP Status Codes RFC 6585 |
500 | INTERNAL_SERVER_ERROR | HTTP/1.1 RFC 7231, Section 6.6.1 |
501 | NOT_IMPLEMENTED | HTTP/1.1 RFC 7231, Section 6.6.2 |
502 | BAD_GATEWAY | HTTP/1.1 RFC 7231, Section 6.6.3 |
503 | SERVICE_UNAVAILABLE | HTTP/1.1 RFC 7231, Section 6.6.4 |
504 | GATEWAY_TIMEOUT | HTTP/1.1 RFC 7231, Section 6.6.5 |
505 | HTTP_VERSION_NOT_SUPPORTED | HTTP/1.1 RFC 7231, Section 6.6.6 |
506 | VARIANT_ALSO_NEGOTIATES | Transparent Content Negotiation in HTTP RFC 2295, Section 8.1 (Experimental) |
507 | INSUFFICIENT_STORAGE | WebDAV RFC 4918, Section 11.5 |
508 | LOOP_DETECTED | WebDAV Binding Extensions RFC 5842, Section 7.2 (Experimental) |
510 | NOT_EXTENDED | An HTTP Extension Framework RFC 2774, Section 7 (Experimental) |
511 | NETWORK_AUTHENTICATION_REQUIRED | Additional HTTP Status Codes RFC 6585, Section 6 |
In order to preserve backwards compatibility, enum values are also present in the http.client module in the form of constants. The enum name is equal to the constant name (i.e. http.HTTPStatus.OK is also available as http.client.OK ).
Changed in version 3.7: Added 421 MISDIRECTED_REQUEST status code.
http — HTTP modules¶
http is a package that collects several modules for working with the HyperText Transfer Protocol:
- http.client is a low-level HTTP protocol client; for high-level URL opening use urllib.request
- http.server contains basic HTTP server classes based on socketserver
- http.cookies has utilities for implementing state management with cookies
- http.cookiejar provides persistence of cookies
The http module also defines the following enums that help you work with http related code:
A subclass of enum.IntEnum that defines a set of HTTP status codes, reason phrases and long descriptions written in English.
>>> 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 модули¶
http — пакет, который объединяет несколько модулей для работы с протоколом передачи гипертекста:
- http.client — клиент протокола HTTP низкого уровня; для открытия URL- адреса высокого уровня используйте urllib.request
- http.server содержит базовые классы HTTP-серверов на основе socketserver
- http.cookies имеет утилиты для реализации управления состоянием с помощью cookie
- http.cookiejar обеспечивает сохранение cookie
http также является модулем, который определяет ряд кодов состояния HTTP и связанных сообщений через перечисление http.HTTPStatus :
Подкласс enum.IntEnum , определяет множество кодов состояния HTTP, фраз причины и длинных описаний, написанных на английском языке.
>>> from http import HTTPStatus >>> HTTPStatus.OK >>> HTTPStatus.OK == 200 True >>> HTTPStatus.OK.value 200 >>> HTTPStatus.OK.phrase 'OK' >>> HTTPStatus.OK.description 'Request fulfilled, document follows' >>> list(HTTPStatus) [, , . ]
Коды состояния HTTP¶
Поддерживаются коды состояния IANA-registered, доступные в http.HTTPStatus :
Код | Перечисление имён | Подробности |
---|---|---|
100 | CONTINUE | HTTP/1.1 RFC 7231, Раздел 6.2.1 |
101 | SWITCHING_PROTOCOLS | HTTP/1.1 RFC 7231, Раздел 6.2.2 |
102 | PROCESSING | WebDAV RFC 2518, Раздел 10.1 |
200 | OK | HTTP/1.1 RFC 7231, Раздел 6.3.1 |
201 | CREATED | HTTP/1.1 RFC 7231, Раздел 6.3.2 |
202 | ACCEPTED | HTTP/1.1 RFC 7231, Раздел 6.3.3 |
203 | NON_AUTHORITATIVE_INFORMATION | HTTP/1.1 RFC 7231, Раздел 6.3.4 |
204 | NO_CONTENT | HTTP/1.1 RFC 7231, Раздел 6.3.5 |
205 | RESET_CONTENT | HTTP/1.1 RFC 7231, Раздел 6.3.6 |
206 | PARTIAL_CONTENT | HTTP/1.1 RFC 7233, Раздел 4.1 |
207 | MULTI_STATUS | WebDAV RFC 4918, Раздел 11.1 |
208 | ALREADY_REPORTED | Расширения привязки WebDAV RFC 5842, Раздел 7.1 (Экспериментальный) |
226 | IM_USED | Дельта-кодирование в HTTP RFC 3229, Раздел 10.4.1 |
300 | MULTIPLE_CHOICES | HTTP/1.1 RFC 7231, Раздел 6.4.1 |
301 | MOVED_PERMANENTLY | HTTP/1.1 RFC 7231, Раздел 6.4.2 |
302 | FOUND | HTTP/1.1 RFC 7231, Раздел 6.4.3 |
303 | SEE_OTHER | HTTP/1.1 RFC 7231, Раздел 6.4.4 |
304 | NOT_MODIFIED | HTTP/1.1 RFC 7232, Раздел 4.1 |
305 | USE_PROXY | HTTP/1.1 RFC 7231, Раздел 6.4.5 |
307 | TEMPORARY_REDIRECT | HTTP/1.1 RFC 7231, Раздел 6.4.7 |
308 | PERMANENT_REDIRECT | Постоянное перенаправление RFC 7238, Раздел 3 (Экспериментальный) |
400 | BAD_REQUEST | HTTP/1.1 RFC 7231, Раздел 6.5.1 |
401 | UNAUTHORIZED | HTTP/1.1 Идентификация RFC 7235, Раздел 3.1 |
402 | PAYMENT_REQUIRED | HTTP/1.1 RFC 7231, Раздел 6.5.2 |
403 | FORBIDDEN | HTTP/1.1 RFC 7231, Раздел 6.5.3 |
404 | NOT_FOUND | HTTP/1.1 RFC 7231, Раздел 6.5.4 |
405 | METHOD_NOT_ALLOWED | HTTP/1.1 RFC 7231, Раздел 6.5.5 |
406 | NOT_ACCEPTABLE | HTTP/1.1 RFC 7231, Раздел 6.5.6 |
407 | PROXY_AUTHENTICATION_REQUIRED | HTTP/1.1 Идентификация RFC 7235, Раздел 3.2 |
408 | REQUEST_TIMEOUT | HTTP/1.1 RFC 7231, Раздел 6.5.7 |
409 | CONFLICT | HTTP/1.1 RFC 7231, Раздел 6.5.8 |
410 | GONE | HTTP/1.1 RFC 7231, Раздел 6.5.9 |
411 | LENGTH_REQUIRED | HTTP/1.1 RFC 7231, Раздел 6.5.10 |
412 | PRECONDITION_FAILED | HTTP/1.1 RFC 7232, Раздел 4.2 |
413 | REQUEST_ENTITY_TOO_LARGE | HTTP/1.1 RFC 7231, Раздел 6.5.11 |
414 | REQUEST_URI_TOO_LONG | HTTP/1.1 RFC 7231, Раздел 6.5.12 |
415 | UNSUPPORTED_MEDIA_TYPE | HTTP/1.1 RFC 7231, Раздел 6.5.13 |
416 | REQUESTED_RANGE_NOT_SATISFIABLE | HTTP/1.1 Диапазон запросов RFC 7233, Раздел 4.4 |
417 | EXPECTATION_FAILED | HTTP/1.1 RFC 7231, Раздел 6.5.14 |
421 | MISDIRECTED_REQUEST | HTTP/2 RFC 7540, Раздел 9.1.2 |
422 | UNPROCESSABLE_ENTITY | WebDAV RFC 4918, Раздел 11.2 |
423 | LOCKED | WebDAV RFC 4918, Раздел 11.3 |
424 | FAILED_DEPENDENCY | WebDAV RFC 4918, Раздел 11.4 |
426 | UPGRADE_REQUIRED | HTTP/1.1 RFC 7231, Раздел 6.5.15 |
428 | PRECONDITION_REQUIRED | Дополнительные Коды состояния HTTP RFC 6585 |
429 | TOO_MANY_REQUESTS | Дополнительные Коды состояния HTTP RFC 6585 |
431 | REQUEST_HEADER_FIELDS_TOO_LARGE | Дополнительные Коды состояния HTTP RFC 6585 |
451 | UNAVAILABLE_FOR_LEGAL_REASONS | Код состояния HTTP для сообщения о юридических препятствиях RFC 7725 |
500 | INTERNAL_SERVER_ERROR | HTTP/1.1 RFC 7231, Раздел 6.6.1 |
501 | NOT_IMPLEMENTED | HTTP/1.1 RFC 7231, Раздел 6.6.2 |
502 | BAD_GATEWAY | HTTP/1.1 RFC 7231, Раздел 6.6.3 |
503 | SERVICE_UNAVAILABLE | HTTP/1.1 RFC 7231, Раздел 6.6.4 |
504 | GATEWAY_TIMEOUT | HTTP/1.1 RFC 7231, Раздел 6.6.5 |
505 | HTTP_VERSION_NOT_SUPPORTED | HTTP/1.1 RFC 7231, Раздел 6.6.6 |
506 | VARIANT_ALSO_NEGOTIATES | Прозрачное согласование содержимого в HTTP RFC 2295, Раздел 8.1 (Экспериментальный) |
507 | INSUFFICIENT_STORAGE | WebDAV RFC 4918, Раздел 11.5 |
508 | LOOP_DETECTED | Расширения привязки WebDAV RFC 5842, Раздел 7.2 (Экспериментальный) |
510 | NOT_EXTENDED | Фреймворк расширения HTTP RFC 2774, Раздел 7 (Экспериментальный) |
511 | NETWORK_AUTHENTICATION_REQUIRED | Дополнительные Коды состояния HTTP RFC 6585, Раздел 6 |
Чтобы сохранить обратную совместимость, значения перечисления также присутствуют в модуле http.client в виде констант. Имя перечисления равно имени константы (т. е. http.HTTPStatus.OK также доступно как http.client.OK ).
Изменено в версии 3.7: Добавлен код состояния 421 MISDIRECTED_REQUEST .
Добавлено в версии 3.8: Добавлен код состояния 451 UNAVAILABLE_FOR_LEGAL_REASONS .
Responses: Status Codes
What are HTTP status codes? Which status codes do exist? These questions are answered in this lesson of the Making HTTP Requests With Python course. You’ll learn about the different status code ranges and what they mean internally. Additionally, you’ll learn how to handle different status codes in multiple ways, e.g. by using if -statements or try-except -blocks.
balakumaranrk on Feb. 8, 2020
In this video what is the purpose of writing :
Ricky White RP Team on Feb. 8, 2020
This is used so that no exception is raised on a successful request. This will allow you to capture unsuccessful requests based on the exception type returned and deal with them accordingly.
idosegev on Feb. 12, 2020
I don’t get any response from my if-elif loop and i don’t know why. maybe it has to do with python38 ?
url = ‘api.github.com‘ response = requests.get(url)
if response.status_code == 202: print(‘Success!’) elif response.status_code == 404: print(‘Not Found.’)
Chris Bailey RP Team on Feb. 12, 2020
There are a couple of differences from your code in the comment you posted and the example in the video lesson:
The url should be url = ‘http://api.github.com’ The first if should be if response.status_code == 200: and not 202 . 200 would mean success and 202 would mean something different, accepted. Because the code I’m demonstrating is an incomplete example, I don’t have a fall back of else: which would catch some other result. I guess you could have it print the response, such as else: print(f’Status Code was ‘)
Using an f string. I hope this helps with your question.
idosegev on Feb. 13, 2020
@Chris Bailey thanks for the quick response!
B S K Karthik on April 19, 2020
@Chris Bailey, Hi Chris Can you please let me know what color theme have you used in visual studio code editor. Thank you.
Chris Bailey RP Team on April 19, 2020
Hi @B S K Karthik, I use Dainty — Material Theme Ocean, in VSCode. Its part of the Dainty theme package. I love the contrast.
B S K Karthik on April 20, 2020