Что такое Request в Python: полное руководство по библиотеке Requests
Что такое Requests и почему это важно
Requests — это элегантная и простая HTTP-библиотека для Python, созданная с девизом «HTTP for Humans». По статистике PyPI, она скачивается более 1 миллиарда раз в месяц, что делает её одной из самых популярных Python-библиотек в мире.
Как говорит создатель библиотеки Кеннет Рейц: «Большинство существующих Python-модулей для HTTP ужасны. Они требуют огромного количества работы для выполнения простейших задач.» Именно эта проблема и привела к созданию Requests. Если вы интересуетесь программированием, хотите улучшить свои навыки или стать квалифицированным разработчиком с нуля, обратите внимание на курсы по Python.
Установка и настройка библиотеки Requests
Установка Requests максимально проста. В отличие от стандартного модуля urllib, который входит в Python по умолчанию, Requests нужно установить отдельно:
pip install requests
После установки вы можете сразу начать работу:
import requests
response = requests.get('https://httpbin.org/get')
print(response.status_code) # 200
print(response.text) # HTML содержимое страницы

HTTP-методы в Requests
Requests поддерживает все основные HTTP-методы, каждый из которых имеет своё предназначение:
GET-запросы
Самый распространённый тип запросов для получения данных:
import requests
# Простой GET-запрос
response = requests.get('https://api.github.com/users/octocat')
# GET с параметрами
params = {'q': 'python', 'sort': 'stars'}
response = requests.get('https://api.github.com/search/repositories', params=params)
POST-запросы
Используются для отправки данных на сервер:
# Отправка JSON данных
data = {'username': 'admin', 'password': 'secret'}
response = requests.post('https://httpbin.org/post', json=data)
# Отправка файлов
files = {'file': open('document.pdf', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
Работа с ответами сервера
Объект Response содержит всю информацию об ответе сервера и предоставляет удобные методы для работы с данными:
Атрибут | Описание | Пример использования |
---|---|---|
status_code | HTTP код ответа | response.status_code == 200 |
text | Текстовое содержимое | response.text |
json() | JSON данные | response.json()[‘key’] |
headers | HTTP заголовки | response.headers[‘Content-Type’] |
cookies | Cookies из ответа | response.cookies[‘session_id’] |
HTTP-коды состояний
Понимание кодов ответа критически важно для правильной обработки запросов:
response = requests.get('https://httpbin.org/status/404')
if response.status_code == 200:
print("Успешно!")
elif response.status_code == 404:
print("Страница не найдена")
elif response.status_code >= 500:
print("Ошибка сервера")
# Или используйте встроенную проверку
response.raise_for_status() # Вызовет исключение при ошибке
Практические примеры использования
Пример 1: Работа с API
Получение информации о погоде через OpenWeatherMap API:
import requests
def get_weather(city, api_key):
url = f"http://api.openweathermap.org/data/2.5/weather"
params = {
'q': city,
'appid': api_key,
'units': 'metric',
'lang': 'ru'
}
response = requests.get(url, params=params)
if response.status_code == 200:
data = response.json()
return f"Погода в {city}: {data['main']['temp']}°C, {data['weather'][0]['description']}"
else:
return f"Ошибка получения данных: {response.status_code}"
Пример 2: Веб-скрапинг с сессиями
Парсинг данных с сайта с авторизацией:
import requests
from bs4 import BeautifulSoup
session = requests.Session()
# Авторизация
login_data = {
'username': 'your_username',
'password': 'your_password'
}
session.post('https://example.com/login', data=login_data)
# Получение защищённых данных
response = session.get('https://example.com/protected-page')
soup = BeautifulSoup(response.text, 'html.parser')
# Обработка данных
titles = soup.find_all('h2', class_='article-title')
for title in titles:
print(title.text.strip())
Продвинутые возможности
Аутентификация
Requests поддерживает различные типы аутентификации:
# Basic Authentication
response = requests.get('https://api.example.com/data',
auth=('username', 'password'))
# Bearer Token
headers = {'Authorization': 'Bearer YOUR_TOKEN_HERE'}
response = requests.get('https://api.example.com/data', headers=headers)
# OAuth
from requests_oauthlib import OAuth1
auth = OAuth1('YOUR_APP_KEY', 'YOUR_APP_SECRET', 'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
response = requests.get('https://api.twitter.com/1.1/account/verify_credentials.json', auth=auth)
Уровни зарплат Python-разработчиков, работающих с API
Обработка ошибок и таймауты
Правильная обработка исключений — залог стабильной работы приложения:
import requests
from requests.exceptions import RequestException, Timeout, ConnectionError
try:
response = requests.get('https://httpbin.org/delay/2', timeout=5)
response.raise_for_status()
data = response.json()
except Timeout:
print("Запрос превысил время ожидания")
except ConnectionError:
print("Ошибка подключения")
except RequestException as e:
print(f"Произошла ошибка: {e}")
except ValueError:
print("Ошибка декодирования JSON")
Оптимизация и лучшие практики
Использование сессий
Сессии позволяют переиспользовать TCP-соединения и сохранять cookies:
session = requests.Session()
session.headers.update({'User-Agent': 'My App 1.0'})
# Все запросы будут использовать один User-Agent и переиспользовать соединения
response1 = session.get('https://httpbin.org/headers')
response2 = session.get('https://httpbin.org/cookies')
Асинхронные запросы
Для множественных запросов используйте concurrent.futures:
import concurrent.futures
import requests
urls = [
'https://httpbin.org/delay/1',
'https://httpbin.org/delay/2',
'https://httpbin.org/delay/3'
]
def fetch_url(url):
response = requests.get(url)
return response.status_code
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
results = list(executor.map(fetch_url, urls))
print(results) # [200, 200, 200]

Часто задаваемые вопросы
Чем Requests лучше встроенного urllib?
Requests предоставляет более простой и интуитивный API. Например, для отправки JSON данных в urllib требуется 10+ строк кода, в Requests — всего одна строка с параметром json=data. Кроме того, Requests автоматически обрабатывает многие аспекты HTTP, такие как кодировки, сжатие и перенаправления.
Как правильно обрабатывать большие файлы?
Используйте параметр stream=True для потоковой загрузки больших файлов, чтобы не загружать их полностью в память. Также можно использовать iter_content() для обработки данных по частям:
response = requests.get('https://example.com/large-file.zip', stream=True)
with open('large-file.zip', 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
Безопасно ли использовать Requests для production?
Да, Requests широко используется в production. Важно правильно настроить таймауты, обработку ошибок и SSL-сертификаты. Для высоконагруженных приложений рассмотрите использование пула соединений и асинхронных библиотек вроде aiohttp.
Дорожная карта изучения Requests
Изучение Requests — это путешествие от простых GET-запросов до создания сложных API-интеграций. Вот пошаговый план развития:
- Базовый уровень: Освойте GET/POST запросы, работу с параметрами и заголовками
- Продвинутый уровень: Изучите сессии, аутентификацию, обработку ошибок и файлов
- Экспертный уровень: Оптимизация производительности, асинхронность, интеграция с фреймворками
- Архитектурный уровень: Проектирование API-клиентов, паттерны интеграции, мониторинг
- Масштабирование: Пулы соединений, кэширование, распределённые системы
В эпоху микросервисов и API-экономики умение работать с HTTP-запросами становится не просто полезным навыком, а необходимостью для любого Python-разработчика. Requests предоставляет все инструменты для этого journey.
Что такое баг и баг-репорт Баг (от английского "bug" — жук, насекомое) — это дефект или ошибка в программном обеспечении, которая приводит к неожиданному или нежелательному поведению системы. Термин впервые был использован программистом Грейс Х...
Принципы работы SDLC и почему им пользуются Представьте себе строительство небоскреба без архитектурного плана. Звучит абсурдно, не правда ли? Однако именно так выглядит разработка программного обеспечения без применения принципов SDLC. Каждый...
Selenium: Основы и история развития Selenium представляет собой набор инструментов с открытым исходным кодом, предназначенный для автоматизации тестирования веб-приложений. Проект был создан в 2004 году Джейсоном Хаггинсом в компании ThoughtWor...
Что такое Story в Jira: основные принципы Story (пользовательская история) в Jira — это тип задачи, который описывает функциональность системы с точки зрения конечного пользователя. В отличие от технических задач, Story фокусируется на том, кто...
Что такое эпик в Agile и Jira Эпик в Jira представляет собой крупную пользовательскую историю или инициативу, которая слишком велика для выполнения в рамках одного спринта и требует разбиения на более мелкие, управляемые задачи. Как отмечает Ма...
Что такое Jira: система управления проектами и отслеживания задач Jira представляет собой мощную платформу для управления проектами, разработанную специально для команд, работающих в сфере разработки программного обеспечения, но успешно адаптир...