Этот тренажер посвящен работе с сетью в Python — а именно выполнению HTTP-запросов с помощью библиотеки requests. Ты научишься отправлять GET и POST запросы, передавать параметры и данные, обрабатывать ответы сервера и работать с JSON. Эти навыки пригодятся для взаимодействия с API различных сервисов, парсинга данных и автоматизации задач. Мы начнем с простых запросов и постепенно перейдем к более сложным сценариям — отправке форм, передаче заголовков и обработке ошибок. Библиотека requests делает всю эту работу максимально удобной и понятной, скрывая сложности низкоуровневых операций.
- Модуль 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: Продвинутые возможности
Импорт библиотеки и первый GET-запрос
Чтобы работать с сетью, нужно сначала импортировать нужную библиотеку. Затем выполните простой GET-запрос к указанному URL и сохраните результат в переменную.
import input1S
response = requests.input2S('https://api.example.com/data')
print(response)Атрибуты объекта Response
После выполнения запроса вы получаете объект Response с различными атрибутами. Сопоставьте атрибуты с тем, что они возвращают.
.json().text.headers.status_codeПроверка статуса ответа
Проанализируйте код и определите, что будет выведено на экран, если сервер успешно обработал запрос.
import requests
response = requests.get('https://httpbin.org/get')
# Предположим, сервер вернул статус 200
print(response.status_code == 200)Исправьте ошибку в GET-запросе с параметрами
В коде допущена ошибка при передаче параметров в GET-запрос. Найдите и исправьте строку с ошибкой.
import requests params = {'query': 'python', 'page': 1}response = requests.get('https://api.example.com/search', parameters=params)print(response.text)POST-запрос с данными формы
Соберите код для отправки POST-запроса с данными формы. Используйте токены из банка для заполнения пропусков.
import requests
form_data = {'username': 'admin', 'password': 'secret'}
response = requests.input1S('https://api.example.com/login', input2S=form_data)
print(response.status_code)GET vs POST: когда что использовать
Распределите сценарии использования по категориям: где уместен GET-запрос, а где POST-запрос.
Извлечение данных из JSON
Сервер вернул JSON-ответ. Определите, что выведет код при обращении к конкретному ключу.
import requests
# Предположим, сервер вернул: {"name": "Alice", "age": 25, "city": "Moscow"}
response = requests.get('https://api.example.com/user')
data = response.json()
print(data['city'])Отправка JSON в POST-запросе
Многие API принимают данные в формате JSON. Заполните пропуски, чтобы отправить данные именно в этом формате.
import requests
user_data = {'name': 'Bob', 'email': 'bob@example.com'}
response = requests.input1S(
'https://api.example.com/users',
input2S=user_data
)
print(response.input3S)Соберите код с обработкой ошибок
Соберите код, который выполняет GET-запрос и корректно обрабатывает возможные ошибки с помощью метода raise_for_status(). Одна строка лишняя.
response.raise_for_status()import requeststry: response = requests.get('https://api.example.com/data')except requests.exceptions.HTTPError as e: print(f'Ошибка: {e}') print(response.text)response.check_status()Исправьте передачу заголовков
В коде есть ошибка при передаче пользовательских заголовков в запрос. Найдите и исправьте её.
import requests my_headers = {'Authorization': 'Bearer token123', 'Accept': 'application/json'}response = requests.get('https://api.example.com/protected', header=my_headers)print(response.json())Что вернет проверка успешности?
Изучите код и определите, что будет выведено. Сервер вернул статус 404 (страница не найдена).
import requests
response = requests.get('https://api.example.com/nonexistent')
# Сервер вернул статус 404
print(response.ok)Порядок работы с API
Расставьте шаги работы с REST API в правильном порядке: от импорта до обработки данных.
Установка таймаута для запроса
Чтобы запрос не висел бесконечно при проблемах с сервером, нужно установить таймаут. Заполните пропуски для установки таймаута в 5 секунд.
import requests
try:
response = requests.get('https://api.example.com/slow', input1S=input2S)
print(response.text)
except requests.exceptions.input3S:
print('Сервер не ответил вовремя')Работа с параметрами URL
Определите, какой URL будет сформирован при выполнении запроса. Введите только часть после знака вопроса (query string).
import requests
params = {'category': 'books', 'limit': 10}
response = requests.get('https://api.example.com/items', params=params)
# Какой query string будет добавлен к URL?
# Введите в формате: key1=value1&key2=value2Полный цикл: запрос с проверкой и обработкой JSON
Соберите полноценный код, который делает GET-запрос, проверяет успешность и выводит данные из JSON-ответа. Две строки лишние.
response = requests.get('https://api.example.com/user/1')import requests data = response.json()if response.ok: print(f"Имя: {data['name']}")else: print('Ошибка запроса')data = response.text()print(response.data['name'])