Объект 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)