Каково назначение и основные возможности библиотеки `requests` в 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().

Ответ 18+ 🔞

Ну ты глянь, какая история с этим requests! Это ж, блядь, как золотой стандарт для питона, когда надо в интернеты лазить и запросы всякие слать. По сравнению с этой встроенной хуйнёй urllib — просто небо и земля, ёпта!

И чё там такого офигенного, спросишь ты?

  • Проще пареной репы: Ты как будто на русском с сервером разговариваешь, а не на ассемблере. Хочешь что-то получить — get(), отправить — post(). Красота!
  • Всё само: Эта мартышлюшка сама и куки подцепит, и если тебя куда-то перенаправят — проследует, и ответ распакует, если он сжат. Сидишь, попиваешь чаёк, пока она пашет.
  • Не подведёт: Её все используют, она проверена временем, как водка в стопке. Актуальная, живая.

Вот смотри, как это выглядит на практике, прям как в жизни:

import requests

# Тыкаем палкой в API Гитхаба, спрашиваем про одного известного кота
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"А живет он тут: {user_data.get('html_url')}")
elif response.status_code == 404:
    print("Чувак, такого юзера нет, нихуя не нашли.")
else:
    print(f"Вообще какая-то хуйня случилась: {response.status_code}. Сервер бормочет: {response.text}")

# Ну а если надо не спрашивать, а сообщать что-то (POST-запрос), то тоже элементарно:
# url = 'https://httpbin.org/post'
# data = {'key': 'value'}
# post_response = requests.post(url, json=data) # Смотри, JSON сам закодирует!
# print(post_response.json())

На что эта библиотека вообще способна, ёпта?

  • Все методы нахуй: GET, POST, PUT, DELETE — да какие угодно, хоть PATCH с HEAD.
  • Данные куда надо: Параметры в URL сунуть (params), форму отправить (data) или JSON (json) — раз плюнуть.
  • Шапки-невидимки: Заголовки (headers) меняешь как перчатки.
  • Сессии — наше всё: Создал requests.Session() и всё — куки запоминаются, соединение не рвётся каждый раз, авторизация тянется. Для нескольких запросов к одному месту — просто must have, иначе будешь как лох выглядеть.
  • Таймауты, чтоб не ждать вечность: Поставил timeout=5 и спи спокойно — через 5 секунд либо ответ, либо свободен.
  • Безопасность: SSL-сертификаты сама проверит, не будь как тот чувак, который на левые сайты ходит.

А теперь, блядь, главные правила, чтобы не обосраться:

  1. Всегда смотри на статус! response.status_code или response.raise_for_status() — твои лучшие друзья. Игнорируешь — получаешь неожиданную хуйню в данных.
  2. Для серии запросов — используй сессию (Session)! Это и быстрее, и умнее. Не изобретай велосипед.
  3. Ставь таймаут, ёбта! requests.get(url, timeout=10). Иначе твой скрипт может зависнуть на полчаса, ждя ответа от сдохшего сервера.
  4. Качаешь что-то большое? Врубай stream=True и читай по кусочкам через response.iter_content(), а то оперативку всю сожрёшь, как тот самый Герасим.