Ответ
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-сертификаты сама проверит, не будь как тот чувак, который на левые сайты ходит.
А теперь, блядь, главные правила, чтобы не обосраться:
- Всегда смотри на статус!
response.status_codeилиresponse.raise_for_status()— твои лучшие друзья. Игнорируешь — получаешь неожиданную хуйню в данных. - Для серии запросов — используй сессию (
Session)! Это и быстрее, и умнее. Не изобретай велосипед. - Ставь таймаут, ёбта!
requests.get(url, timeout=10). Иначе твой скрипт может зависнуть на полчаса, ждя ответа от сдохшего сервера. - Качаешь что-то большое? Врубай
stream=Trueи читай по кусочкам черезresponse.iter_content(), а то оперативку всю сожрёшь, как тот самый Герасим.