В этом модуле мы научимся обрабатывать ответы от сервера при работе с библиотекой requests. Вы узнаете, как проверять статус-коды, чтобы убедиться в успешности запроса, как извлекать текстовые и бинарные данные, а также как работать с форматом JSON. Особое внимание уделим обработке ошибок и заголовков ответа. Эти навыки необходимы для создания надежных парсеров и приложений, взаимодействующих с API.
- Модуль 1: Основы синтаксиса Python
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Арифметические операторы (+, -, *, /).
- Целочисленное деление и остаток (// и %).
- Возведение в степень (**).
- Операторы сравнения.
- Логические операторы (and, or, not).
- Операторы присваивания (=, +=, -=).
- Операторы принадлежности (in, not in).
- Операторы идентичности (is, is not).
- Битовые операторы.
- Тернарный оператор.
- Модуль 4: Ввод и вывод данных
- Модуль 5: Условные конструкции
- Модуль 6: Циклы
- Модуль 7: Строки
- Модуль 8: Списки
- Модуль 9: Кортежи
- Модуль 10: Словари
- Модуль 11: Множества
- Модуль 12: Функции
- Модуль 13: Встроенные функции
- Модуль 14: Работа с файлами
- Модуль 15: Обработка исключений
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль requests (HTTP запросы).
- GET и POST запросы.
- Обработка ответов.
- Работа с API.
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
Проверка успешности запроса
После выполнения запроса необходимо убедиться, что сервер вернул положительный ответ. Заполните пропуски, чтобы проверить, равен ли код ответа 200 (OK), и вывести содержимое ответа.
import requests
response = requests.get('https://api.example.com/data')
# Проверяем, равен ли код ответа 200
if response.input1S == 200:
print("Успех!")
print(response.input2S)
else:
print("Ошибка запроса")Сопоставление HTTP статус-кодов
При работе с сетью важно понимать, что означает тот или иной код ответа. Сопоставьте численные коды с их описанием.
200404500403Разница между text и content
Проанализируйте код. Сервер возвращает строку "Привет". Мы пытаемся получить доступ к данным разными способами. Что выведет последняя команда `print`, если мы запрашиваем тип данных атрибута `content`?
# Представим, что response.text вернет строку "Привет"
# response.encoding = 'utf-8'
data_str = response.text
data_bytes = response.content
print(type(data_bytes))Парсинг JSON ответа
Сервер вернул данные о пользователе в формате JSON: `{"id": 1, "name": "Alice"}`. Допишите код, чтобы преобразовать ответ в словарь Python и вывести имя пользователя.
import requests
response = requests.get('https://api.site.com/user/1')
if response.status_code == 200:
# Преобразуем JSON в словарь
user_data = response.input1S
# Выводим имя
print(f"User: {user_data[input2S]}")Исправьте логическую ошибку при проверке статуса
Код должен выводить сообщение об успехе только при статусе 200. Однако, в условии допущена ошибка, из-за которой возникает SyntaxError или неверная логика. Найдите и исправьте строку с условием.
response = requests.get('https://example.com')if response.status_code = 200: print("Connected!")else: print("Error")Чтение заголовков
Мы запросили данные и сервер вернул заголовки. Укажите, что именно выведет код, обращаясь к заголовку `Content-Type`. Обратите внимание на регистр ключей при доступе (requests позволяет обращаться к заголовкам без учета регистра, но значение выводится как есть).
# headers пришедшие от сервера:
# {'Date': 'Mon, 01 Jan 2024', 'Content-Type': 'application/json; charset=utf-8'}
ctype = response.headers['content-type']
print(ctype.split(';')[0])Свойства объекта Response
Распределите атрибуты и методы объекта `response` по категориям: "Данные тела ответа" и "Метаданные запроса".
.text.status_code.content.headers.json().okБезопасный запрос с обработкой ошибок
Расставьте строки кода в правильном порядке, чтобы выполнить запрос и гарантированно перехватить возможные ошибки HTTP (например, 404 или 500).
try: response = requests.get(url) response.raise_for_status() print(response.json())except requests.exceptions.HTTPError: print("Произошла ошибка HTTP")response.status_code()print(response.json)Скачивание и сохранение изображения
Соберите код, который скачивает картинку и сохраняет её в файл. Обратите внимание на режим открытия файла для бинарных данных. Один из фрагментов содержит ошибку режима файла.
response = requests.get('https://site.com/img.png')with open('image.png', 'wb') as f: f.write(response.content)with open('image.png', 'w') as f: f.write(response.text)