{
  "id": 231,
  "title": "Python Requests: полное руководство по HTTP-запросам",
  "speaker": "Corey Schafer",
  "topic": "Практическое руководство по библиотеке Python Requests: HTTP-запросы, загрузка данных, работа с JSON и отправка POST-запросов.",
  "duration_label": "25:00",
  "theses": [
    {
      "title": "Requests — самый скачиваемый пакет Python",
      "description": "Библиотека requests является самым популярным Python-пакетом, и это неслучайно. Она предоставляет простой и интуитивный интерфейс для выполнения HTTP-запросов, заменяя громоздкий встроенный модуль urllib. Простота использования сделала её стандартом де-факто для работы с веб-запросами в Python."
    },
    {
      "title": "GET-запросы — основа взаимодействия с веб-страницами",
      "description": "GET-запрос позволяет получить содержимое веб-страницы. Метод requests.get() возвращает объект Response, содержащий статус-код, заголовки и тело ответа. Это базовая операция для любого веб-скрапинга или работы с API."
    },
    {
      "title": "Коды состояния HTTP определяют результат запроса",
      "description": "Каждый HTTP-ответ содержит числовой код состояния: 200 означает успех, 300 — перенаправление, 400 — ошибку клиента, 500 — ошибку сервера. Проверка response.status_code или использование response.ok позволяет корректно обрабатывать результаты запросов в коде."
    },
    {
      "title": "Работа с JSON через встроенный метод .json()",
      "description": "Объект Response имеет метод .json(), который автоматически парсит JSON-ответ в словарь Python. Это избавляет от необходимости вручную использовать модуль json. Большинство современных API возвращают данные именно в формате JSON."
    },
    {
      "title": "Параметры запроса передаются через словарь params",
      "description": "Вместо ручного формирования URL-строки с параметрами можно передать словарь в аргумент params метода get(). Requests автоматически кодирует параметры и добавляет их к URL. Это безопаснее и читабельнее, чем конкатенация строк."
    },
    {
      "title": "Загрузка файлов и изображений через response.content",
      "description": "Атрибут response.content возвращает бинарное содержимое ответа, что позволяет скачивать изображения, PDF и другие файлы. Достаточно записать content в файл в бинарном режиме ('wb'). Это простой способ автоматизировать загрузку медиа-контента."
    },
    {
      "title": "POST-запросы для отправки данных на сервер",
      "description": "Метод requests.post() позволяет отправлять данные на сервер через аргумент data (словарь с данными формы) или json (для JSON-тела). POST используется для авторизации, отправки форм и создания ресурсов через API. Это вторая по частоте операция после GET."
    },
    {
      "title": "Заголовки запроса настраивают поведение сервера",
      "description": "Аргумент headers позволяет передать пользовательские HTTP-заголовки: User-Agent, Authorization, Content-Type и другие. Многие API требуют токен авторизации в заголовке. Заголовки также позволяют имитировать запросы браузера при скрапинге."
    },
    {
      "title": "Аутентификация через auth упрощает доступ к API",
      "description": "Requests поддерживает Basic Authentication через аргумент auth=(username, password). Для OAuth и токенов используются заголовки Authorization. Это позволяет работать с защищёнными API без сторонних библиотек."
    },
    {
      "title": "Таймауты предотвращают зависание программы",
      "description": "Аргумент timeout задаёт максимальное время ожидания ответа в секундах. Без таймаута запрос может ждать бесконечно, блокируя программу. Всегда рекомендуется устанавливать таймаут при работе с внешними сервисами."
    }
  ],
  "exercises": [
    {
      "goal": "Выполните GET-запрос к любому публичному сайту с помощью requests.get(). Выведите статус-код, заголовки ответа и первые 500 символов текста страницы. Проверьте response.ok и response.status_code. Попробуйте запросить несуществующую страницу и обработайте ошибку 404.",
      "title": "Получение и анализ веб-страницы"
    },
    {
      "goal": "Используйте API httpbin.org или jsonplaceholder.typicode.com для практики. Отправьте GET-запрос, получите JSON-ответ методом .json() и извлеките конкретные поля из словаря. Передайте параметры через аргумент params и убедитесь, что URL сформирован корректно.",
      "title": "Работа с публичным JSON API"
    },
    {
      "goal": "Найдите URL любого изображения в интернете. Скачайте его с помощью requests.get() и сохраните на диск через response.content в бинарном режиме записи. Проверьте, что файл корректно открывается. Добавьте проверку статус-кода перед сохранением.",
      "title": "Загрузка изображения из интернета"
    },
    {
      "goal": "Отправьте POST-запрос на httpbin.org/post с данными формы через аргумент data. Затем повторите запрос, передав данные как JSON через аргумент json. Сравните ответы сервера: обратите внимание на различия в полях form и json в ответе.",
      "title": "Отправка POST-запроса с данными"
    },
    {
      "goal": "Создайте скрипт, который принимает список URL и проверяет доступность каждого. Используйте таймаут 5 секунд, обрабатывайте исключения requests.exceptions.RequestException. Выводите статус каждого сайта: доступен (200), перенаправление (3xx), ошибка (4xx/5xx) или таймаут.",
      "title": "Скрипт мониторинга доступности сайтов"
    }
  ],
  "quotes": [
    {
      "text": "Библиотека requests позволяет нам легко выполнять HTTP-запросы для получения информации с веб-сайтов (The requests library allows us to easily make HTTP requests to get information from websites)",
      "author": "Corey Schafer"
    },
    {
      "text": "Я считаю, что это самый скачиваемый пакет Python, и на то есть веские причины (I believe it's the most downloaded Python package and there is good reason for that)",
      "author": "Corey Schafer"
    }
  ],
  "full_markdown": "# Python Requests: полное руководство по HTTP-запросам\n\n> Спикер: Corey Schafer | Длительность: 25:00\n\n## Ключевые идеи\n\n1. **Requests — самый скачиваемый пакет Python** — библиотека предоставляет простой интерфейс для HTTP-запросов и является стандартом де-факто для работы с вебом в Python.\n2. **GET-запросы — основа взаимодействия с веб-страницами** — метод requests.get() возвращает объект Response с кодом состояния, заголовками и телом ответа.\n3. **Коды состояния HTTP определяют результат запроса** — 200 означает успех, 4xx — ошибку клиента, 5xx — ошибку сервера; проверяйте response.ok.\n4. **Работа с JSON через встроенный метод .json()** — автоматический парсинг JSON-ответа в словарь Python без ручной обработки.\n5. **Параметры запроса передаются через словарь params** — безопасная и читаемая альтернатива ручному формированию URL.\n6. **Загрузка файлов через response.content** — бинарное содержимое ответа позволяет скачивать изображения, PDF и другие файлы.\n7. **POST-запросы для отправки данных** — аргументы data и json позволяют отправлять формы и JSON-данные на сервер.\n8. **Заголовки настраивают поведение запроса** — User-Agent, Authorization и другие заголовки через аргумент headers.\n9. **Аутентификация через auth** — встроенная поддержка Basic Auth и возможность передачи токенов в заголовках.\n10. **Таймауты предотвращают зависание** — всегда задавайте timeout при работе с внешними сервисами.\n\n## Транскрипт\n\n### Введение в библиотеку Requests\n\nБиблиотека requests позволяет легко выполнять HTTP-запросы для получения информации с веб-сайтов. Это самый скачиваемый пакет Python, и на то есть веские причины — он делает работу с HTTP простой и интуитивной.\n\nRequests предоставляет методы для всех основных HTTP-операций: GET для получения данных, POST для отправки, PUT для обновления и DELETE для удаления. Объект Response, возвращаемый каждым методом, содержит всю информацию об ответе сервера: статус-код, заголовки, тело ответа в текстовом и бинарном виде, а также метод .json() для автоматического парсинга JSON.\n\n### Практическое применение\n\nОсновные сценарии использования: получение веб-страниц и парсинг данных, работа с REST API, загрузка файлов и изображений, отправка данных форм и JSON, аутентификация на сервисах.\n\n## Практические задания\n\n### Задание 1: Получение и анализ веб-страницы\nВыполните GET-запрос к любому публичному сайту с помощью requests.get(). Выведите статус-код, заголовки ответа и первые 500 символов текста страницы. Проверьте response.ok и response.status_code. Попробуйте запросить несуществующую страницу и обработайте ошибку 404.\n\n### Задание 2: Работа с публичным JSON API\nИспользуйте API httpbin.org или jsonplaceholder.typicode.com для практики. Отправьте GET-запрос, получите JSON-ответ методом .json() и извлеките конкретные поля из словаря. Передайте параметры через аргумент params.\n\n### Задание 3: Загрузка изображения из интернета\nНайдите URL любого изображения. Скачайте его с помощью requests.get() и сохраните на диск через response.content в бинарном режиме записи. Добавьте проверку статус-кода перед сохранением.\n\n### Задание 4: Отправка POST-запроса с данными\nОтправьте POST-запрос на httpbin.org/post с данными формы через аргумент data, затем через json. Сравните ответы сервера.\n\n### Задание 5: Скрипт мониторинга доступности сайтов\nСоздайте скрипт, который проверяет доступность списка URL с таймаутом 5 секунд и выводит статус каждого сайта.\n\n## Лучшие цитаты\n\n> «Библиотека requests позволяет нам легко выполнять HTTP-запросы для получения информации с веб-сайтов» — Corey Schafer\n\n> «Я считаю, что это самый скачиваемый пакет Python, и на то есть веские причины» — Corey Schafer",
  "youtube_url": "https://www.youtube.com/watch?v=tb8gHvYlCFs",
  "url": "https://ekstraktznaniy.ru/workbook/231"
}