Учебники

Python — HTTP-ответ

Протокол http или Hyper Text Transfer Protocol работает на модели клиент-сервер. Обычно веб-браузер является клиентом, а компьютер, на котором размещается веб-сайт, является сервером. После получения запроса от клиента сервер генерирует ответ и отправляет его обратно клиенту в определенном формате.

После получения и интерпретации сообщения запроса сервер отвечает сообщением HTTP-ответа:

  • A Status-line
  • Zero or more header (General|Response|Entity) fields followed by CRLF
  • An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
  • Optionally a message-body

В следующих разделах объясняется каждая из сущностей, используемых в ответном сообщении HTTP.

Сообщение Status-Line

Строка состояния состоит из версии протокола, за которой следует числовой код состояния и связанная с ним текстовая фраза. Элементы разделяются пробелами SP.

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

Версия HTTP

Сервер, поддерживающий HTTP версии 1.1, вернет следующую информацию о версии:

HTTP-Version = HTTP/1.1

Код состояния

Элемент Status-Code представляет собой трехзначное целое число, где первая цифра Status-Code определяет класс ответа, а последние две цифры не имеют никакой роли категоризации. Для первой цифры есть 5 значений:

SN Код и описание
1 1xx: информационный

Это означает, что запрос был получен, и процесс продолжается.

2 2xx: успех

Это означает, что действие было успешно получено, понято и принято.

3 3xx: перенаправление

Это означает, что для выполнения запроса необходимо предпринять дальнейшие действия.

4 4xx: ошибка клиента

Это означает, что запрос содержит неверный синтаксис или не может быть выполнен.

5 5xx: ошибка сервера

Это означает, что серверу не удалось выполнить явно допустимый запрос.

Это означает, что запрос был получен, и процесс продолжается.

Это означает, что действие было успешно получено, понято и принято.

Это означает, что для выполнения запроса необходимо предпринять дальнейшие действия.

Это означает, что запрос содержит неверный синтаксис или не может быть выполнен.

Это означает, что серверу не удалось выполнить явно допустимый запрос.

Коды состояния HTTP являются расширяемыми, и приложениям HTTP не требуется понимать значение всех зарегистрированных кодов состояния.

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

В приведенной ниже программе Python мы используем модуль urllib3, чтобы сделать http GET-запрос и получить ответ, содержащий данные. Он также предоставляет код ответа, который также управляется функциями в модуле. Объект PoolManager обрабатывает все детали пула соединений, а также обеспечивает безопасность потоков.

import urllib3
http = urllib3.PoolManager()

resp = http.request('GET', 'http://tutorialspoint.com/robots.txt')
print resp.data

# get the status of the response
print resp.status

Когда мы запускаем вышеуказанную программу, мы получаем следующий вывод: