Объект Response инкапсулирует информацию, которую передает сервер, а также предоставляет набор методов и атрибутов для доступа к данным. Информации достаточно много – время выполнения запроса, заголовки, код статуса, содержимое ответа и так далее.
Разработчику важно понимать назначение и принцип использования данных атрибутов. Это не только упрощает работу над проектами, но и делает код более эффективным и предсказуемым. Далее кратко будут рассмотрены основные атрибуты.
Ключевые характеристики объекта Response
— инкапсуляция данных. Объект аккумулирует все составляющие HTTP-ответа и предоставляет удобный доступ к отдельным элементам;
— легковесность. Объект максимально оптимизирован в контексте потребления ресурсов, что позволяет использовать его в высоконагруженных приложениях;
— иммутабельность. После создания объект нельзя изменить, все данные и атрибуты являются константами.
Особенности поведения объекта Response
— доступ к данным. Предоставляются удобные методы для доступа к отдельным составляющим ответа;
— потоковая обработка. Есть возможность настройки потоковой обработки данных, что обеспечивает работу с большими объемами информации;
— автоматическая десериализация. Ряд методов позволяют автоматически преобразовать данные в объект Python;
— обработка исключений. При неудачном запросе объект не генерирует исключение, а передает соответствующий статус-код. Это позволяет разработчику корректно обработать ситуацию в коде, что улучшает стабильность работы приложения.
— использование сессий. Встроенные инструменты позволяют сохранять состояние между запросами и предоставляют дополнительные механизмы, ускоряющие обработку запросов.
Стандартный запрос имеет формат:
response = requests.get('https://httpbin.org/get')
После выполнения кода в переменную response заносится объект Response, что позволяет получить отдельные элементы полученного ответа.
Структура объекта выглядит примерно так:
Response {
status_code: 200,
headers: {...},
url: 'https://httpbin.org/get',
text: '...',
content: b'...',
json: <method>,
elapsed: <datetime.timedelta>,
...
}
Здесь status_code, headers, url, text, content и так далее – атрибуты объекта, elapsed и json – методы, которые можно использовать.
Важно понимать, что это только способ продемонстрировать структуру объекта. В реальной работе для доступа используется точечная нотация, например, response.status_code или response.json().
Далее будут перечислены доступные методы:
status_code — HTTP-код статуса ответа
text — текстовое представление содержимого ответа;
content – содержимое ответа в виде байтов;
json – метод для десериализации JSON-ответа;
headers – заголовки HTTP, возвращаемые сервером;
url – исходный URL-адрес, на который был выполнен запрос;
encoding – кодировка ответа;
elapsed – время, затраченное на выполнение запроса;
cookies – куки, возвращаемые сервером;
history – список объектов Response, представляющих историю переадресаций;
ok – логический атрибут, указывающий, был ли запрос успешным (коды 2xx);
Reason – сообщение статуса HTTP (например, «OK», «Not Found»).
Для лучшего понимание работы с атрибутами можно использовать следующий код:
import requests
# URL для примеров
url = "https://httpbin.org/user-agent"
# Выполняем GET-запрос
response = requests.get(url)
# status_code: HTTP-код статуса ответа.
print("HTTP-код статуса ответа:", response.status_code)
# text: Текстовое представление содержимого ответа.
print("Текстовое содержимое ответа:", response.text)
# content: Содержимое ответа в виде байтов.
print("Содержимое ответа в виде байтов:", response.content)
# json: Метод для десериализации JSON-ответа.
json_response = response.json()
print("Десериализованный JSON-ответ:", json_response)
# headers: Заголовки HTTP, возвращаемые сервером.
print("Заголовки HTTP:", response.headers)
# url: Исходный URL-адрес, на который был выполнен запрос.
print("Исходный URL-адрес запроса:", response.url)
# encoding: Кодировка ответа.
print("Кодировка ответа:", response.encoding)
# elapsed: Время, затраченное на выполнение запроса.
print("Время выполнения запроса:", response.elapsed)
# cookies: Куки, возвращаемые сервером.
print("Куки, возвращаемые сервером:", response.cookies)
# history: Список объектов Response, представляющих историю перенаправлений.
print("История перенаправлений:", response.history)
# ok: Логический атрибут, указывающий, был ли запрос успешным (коды 2xx).
print("Запрос успешен (коды 2xx):", response.ok)
# reason: Сообщение статуса HTTP (например, "OK", "Not Found").
print("Сообщение статуса HTTP:", response.reason)