Каково назначение и основные возможности библиотеки `requests` в Python?

«Каково назначение и основные возможности библиотеки `requests` в Python?» — вопрос из категории Библиотеки и модули, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

requests — это де-факто стандартная HTTP-библиотека для Python, предназначенная для отправки HTTP-запросов и удобной обработки ответов. Она значительно упрощает работу с веб-сервисами по сравнению со встроенными модулями, такими как urllib.

Почему requests предпочтительнее:

  • Простота и интуитивность: Высокоуровневый API делает отправку запросов и обработку ответов очень легкой.
  • Автоматизация: Автоматически обрабатывает сжатие, кодировку, куки, редиректы и другие детали HTTP-протокола.
  • Надежность: Активно поддерживается и широко используется в индустрии.

Пример GET-запроса и обработка JSON:

import requests

# Отправка GET-запроса к публичному API GitHub
response = requests.get('https://api.github.com/users/octocat')

# Проверка статуса ответа
if response.status_code == 200:
    print("Запрос успешен!")
    # Автоматическая десериализация JSON-ответа
    user_data = response.json()
    print(f"Имя пользователя: {user_data.get('name')}")
    print(f"URL профиля: {user_data.get('html_url')}")
elif response.status_code == 404:
    print("Пользователь не найден.")
else:
    print(f"Ошибка при запросе: {response.status_code} - {response.text}")

# Пример POST-запроса с JSON-данными
# url = 'https://httpbin.org/post'
# data = {'key': 'value'}
# post_response = requests.post(url, json=data)
# print(post_response.json())

Ключевые возможности:

  • Поддержка всех HTTP-методов: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS.
  • Параметры запроса: Легкая передача URL-параметров (params) и данных формы (data) или JSON (json).
  • Заголовки: Управление HTTP-заголовками (headers).
  • Автоматическая обработка: Куки, редиректы, сжатие, кодировка.
  • Сессии (requests.Session): Позволяют сохранять параметры между запросами (например, куки, заголовки) и эффективно переиспользовать TCP-соединения, что важно для производительности и сохранения состояния.
  • Таймауты: Установка лимитов времени для запросов.
  • SSL-верификация: Встроенная проверка SSL-сертификатов.

Рекомендации и лучшие практики:

  • Всегда проверяйте response.status_code или используйте response.raise_for_status() для обработки ошибок HTTP.
  • Используйте requests.Session() для серии связанных запросов, чтобы повысить производительность и управлять состоянием (например, аутентификацией).
  • Устанавливайте timeout для всех запросов, чтобы избежать зависания программы при медленном или недоступном сервере.
  • Для потоковой передачи данных используйте stream=True и итерируйтесь по response.iter_content().