# Python Requests: полное руководство по HTTP-запросам

> Спикер: Corey Schafer | Длительность: 25:00

## Ключевые идеи

1. **Requests — самый скачиваемый пакет Python** — библиотека предоставляет простой интерфейс для HTTP-запросов и является стандартом де-факто для работы с вебом в Python.
2. **GET-запросы — основа взаимодействия с веб-страницами** — метод requests.get() возвращает объект Response с кодом состояния, заголовками и телом ответа.
3. **Коды состояния HTTP определяют результат запроса** — 200 означает успех, 4xx — ошибку клиента, 5xx — ошибку сервера; проверяйте response.ok.
4. **Работа с JSON через встроенный метод .json()** — автоматический парсинг JSON-ответа в словарь Python без ручной обработки.
5. **Параметры запроса передаются через словарь params** — безопасная и читаемая альтернатива ручному формированию URL.
6. **Загрузка файлов через response.content** — бинарное содержимое ответа позволяет скачивать изображения, PDF и другие файлы.
7. **POST-запросы для отправки данных** — аргументы data и json позволяют отправлять формы и JSON-данные на сервер.
8. **Заголовки настраивают поведение запроса** — User-Agent, Authorization и другие заголовки через аргумент headers.
9. **Аутентификация через auth** — встроенная поддержка Basic Auth и возможность передачи токенов в заголовках.
10. **Таймауты предотвращают зависание** — всегда задавайте timeout при работе с внешними сервисами.

## Транскрипт

### Введение в библиотеку Requests

Библиотека requests позволяет легко выполнять HTTP-запросы для получения информации с веб-сайтов. Это самый скачиваемый пакет Python, и на то есть веские причины — он делает работу с HTTP простой и интуитивной.

Requests предоставляет методы для всех основных HTTP-операций: GET для получения данных, POST для отправки, PUT для обновления и DELETE для удаления. Объект Response, возвращаемый каждым методом, содержит всю информацию об ответе сервера: статус-код, заголовки, тело ответа в текстовом и бинарном виде, а также метод .json() для автоматического парсинга JSON.

### Практическое применение

Основные сценарии использования: получение веб-страниц и парсинг данных, работа с REST API, загрузка файлов и изображений, отправка данных форм и JSON, аутентификация на сервисах.

## Практические задания

### Задание 1: Получение и анализ веб-страницы
Выполните GET-запрос к любому публичному сайту с помощью requests.get(). Выведите статус-код, заголовки ответа и первые 500 символов текста страницы. Проверьте response.ok и response.status_code. Попробуйте запросить несуществующую страницу и обработайте ошибку 404.

### Задание 2: Работа с публичным JSON API
Используйте API httpbin.org или jsonplaceholder.typicode.com для практики. Отправьте GET-запрос, получите JSON-ответ методом .json() и извлеките конкретные поля из словаря. Передайте параметры через аргумент params.

### Задание 3: Загрузка изображения из интернета
Найдите URL любого изображения. Скачайте его с помощью requests.get() и сохраните на диск через response.content в бинарном режиме записи. Добавьте проверку статус-кода перед сохранением.

### Задание 4: Отправка POST-запроса с данными
Отправьте POST-запрос на httpbin.org/post с данными формы через аргумент data, затем через json. Сравните ответы сервера.

### Задание 5: Скрипт мониторинга доступности сайтов
Создайте скрипт, который проверяет доступность списка URL с таймаутом 5 секунд и выводит статус каждого сайта.

## Лучшие цитаты

> «Библиотека requests позволяет нам легко выполнять HTTP-запросы для получения информации с веб-сайтов» — Corey Schafer

> «Я считаю, что это самый скачиваемый пакет Python, и на то есть веские причины» — Corey Schafer