Обработка ответов

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

В этом модуле мы научимся обрабатывать ответы от сервера при работе с библиотекой requests. Вы узнаете, как проверять статус-коды, чтобы убедиться в успешности запроса, как извлекать текстовые и бинарные данные, а также как работать с форматом JSON. Особое внимание уделим обработке ошибок и заголовков ответа. Эти навыки необходимы для создания надежных парсеров и приложений, взаимодействующих с API.

Список тем

Проверка успешности запроса

id: 40148_task1

После выполнения запроса необходимо убедиться, что сервер вернул положительный ответ. Заполните пропуски, чтобы проверить, равен ли код ответа 200 (OK), и вывести содержимое ответа.

Заполните пропуски
import requests

response = requests.get('https://api.example.com/data')

# Проверяем, равен ли код ответа 200
if response.input1S == 200:
    print("Успех!")
    print(response.input2S)
else:
    print("Ошибка запроса")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сопоставление HTTP статус-кодов

id: 40148_task2

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

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Ресурс не найден (Not Found)
Успешный запрос (OK)
Внутренняя ошибка сервера (Internal Server Error)
Доступ запрещен (Forbidden)
200
404
500
403
Сообщения
Проверить
Показать подсказку

Разница между text и content

id: 40148_task3

Проанализируйте код. Сервер возвращает строку "Привет". Мы пытаемся получить доступ к данным разными способами. Что выведет последняя команда `print`, если мы запрашиваем тип данных атрибута `content`?

Выберите правильный вариант ответа
# Представим, что response.text вернет строку "Привет"
# response.encoding = 'utf-8'

data_str = response.text
data_bytes = response.content

print(type(data_bytes))
Сообщения
Проверить
Показать подсказку

Парсинг JSON ответа

id: 40148_task4

Сервер вернул данные о пользователе в формате 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]}")
json()
'name'
text
'Alice'
content
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Исправьте логическую ошибку при проверке статуса

id: 40148_task5

Код должен выводить сообщение об успехе только при статусе 200. Однако, в условии допущена ошибка, из-за которой возникает SyntaxError или неверная логика. Найдите и исправьте строку с условием.

Найдите ошибку и исправьте
response = requests.get('https://example.com')
if response.status_code = 200:
    print("Connected!")
else:
    print("Error")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Чтение заголовков

id: 40148_task6

Мы запросили данные и сервер вернул заголовки. Укажите, что именно выведет код, обращаясь к заголовку `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

id: 40148_task7

Распределите атрибуты и методы объекта `response` по категориям: "Данные тела ответа" и "Метаданные запроса".

Перетяните элементы в соответствующие блоки
Данные тела ответа
Метаданные и статус
.text
.status_code
.content
.headers
.json()
.ok
Сообщения
Проверить
Показать подсказку

Безопасный запрос с обработкой ошибок

id: 40148_task8

Расставьте строки кода в правильном порядке, чтобы выполнить запрос и гарантированно перехватить возможные ошибки 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)
Сообщения
Проверить
Показать подсказку

Скачивание и сохранение изображения

id: 40148_task9

Соберите код, который скачивает картинку и сохраняет её в файл. Обратите внимание на режим открытия файла для бинарных данных. Один из фрагментов содержит ошибку режима файла.

Перетяните в правильном порядке строки из одного блока в другой
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)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру