25.06.2025
123
7 мин

Что такое 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 содержимое страницы
Мужчина изучает Request в Python

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_codeHTTP код ответаresponse.status_code == 200
textТекстовое содержимоеresponse.text
json()JSON данныеresponse.json()[‘key’]
headersHTTP заголовкиresponse.headers[‘Content-Type’]
cookiesCookies из ответа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

Junior
80,000 ₽
Middle
160,000 ₽
Senior
280,000 ₽

Обработка ошибок и таймауты

Правильная обработка исключений — залог стабильной работы приложения:

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]
Разработчик изучает библиотеку Request в Python

Часто задаваемые вопросы

Чем 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.

Оцените статью

4.7 5 (12 оценок)
Хочу стать Python-разработчиком!
Специально для вас мы собрали отдельную подборку лучших онлайн-курсов по Python на рынке и сравнили их по цене, продолжительности и отзывам студентов.
Подборка курсов по Python