Ответ
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().