Как сделать запросы в интернет с помощью Python?

онлайн тренажер по питону
Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что такое библиотека requests и зачем она нужна

Библиотека requests является одной из самых популярных и простых в использовании Python-библиотек для выполнения HTTP-запросов. Она предоставляет удобный интерфейс для отправки GET, POST, PUT, DELETE и других типов HTTP-запросов с минимальным количеством кода.

Основные преимущества библиотеки requests

  • Простота синтаксиса и интуитивно понятный API
  • Встроенная поддержка сессий и управление куки
  • Автоматическая обработка JSON и форм
  • Поддержка различных методов авторизации
  • Возможность работы с прокси-серверами
  • Подробная документация на русском и английском языках
  • Активная поддержка сообщества разработчиков

Установка библиотеки requests

Установка библиотеки requests выполняется через менеджер пакетов pip. Процесс установки зависит от версии Python, которую вы используете.

Стандартная установка

pip install requests

Установка для Python 3

Если в системе установлено несколько версий Python, используйте команду pip3 для установки в окружение Python 3:

pip3 install requests

Проверка установки

После установки можно проверить успешность процедуры, импортировав библиотеку в Python-консоли:

import requests
print(requests.__version__)

Основы работы с GET-запросами

GET-запросы используются для получения данных с веб-сервера. Это наиболее распространенный тип HTTP-запросов в веб-разработке.

Простой GET-запрос

import requests

response = requests.get('https://api.github.com')
print(response.status_code)  # Статус ответа (200 - OK)
print(response.text)         # Тело ответа в виде строки

Анализ ответа сервера

При работе с GET-запросами важно правильно анализировать полученный ответ. Объект response содержит множество полезных атрибутов:

  • status_code - HTTP-статус ответа
  • text - содержимое ответа в текстовом формате
  • content - содержимое ответа в байтах
  • headers - заголовки ответа
  • url - итоговый URL запроса

Работа с параметрами запроса

Параметры URL можно передавать через словарь, что делает код более читаемым и удобным для модификации:

params = {
    'q': 'python programming',
    'page': 2,
    'limit': 50
}

response = requests.get('https://www.example.com/search', params=params)
print(response.url)  # Показать сформированный URL с параметрами

POST-запросы и отправка данных на сервер

POST-запросы используются для отправки данных на сервер, например, при заполнении форм или создании новых записей в базе данных.

Отправка данных формы

data = {
    'username': 'admin',
    'password': '12345',
    'email': 'admin@example.com'
}

response = requests.post('https://httpbin.org/post', data=data)
print(response.text)

Отправка JSON-данных

При работе с современными API часто требуется отправлять данные в формате JSON. Библиотека requests автоматически устанавливает правильный Content-Type при использовании параметра json:

import json

data = {
    'name': 'John Doe',
    'age': 30,
    'city': 'Moscow'
}

response = requests.post('https://httpbin.org/post', json=data)
result = response.json()  # Автоматическое преобразование ответа в JSON
print(result)

Различия между data и json параметрами

  • Параметр data отправляет данные как форму (application/x-www-form-urlencoded)
  • Параметр json отправляет данные в формате JSON (application/json)

Работа с заголовками HTTP

HTTP-заголовки содержат метаинформацию о запросе или ответе. Правильная настройка заголовков критически важна при работе с API и веб-скрапинге.

Установка пользовательских заголовков

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
    'Accept': 'application/json',
    'Content-Type': 'application/json'
}

response = requests.get('https://httpbin.org/headers', headers=headers)
print(response.json())

Важные заголовки для веб-скрапинга

  • User-Agent - идентификация клиента (браузер, бот)
  • Accept - типы контента, которые клиент может обработать
  • Accept-Language - предпочитаемые языки
  • Referer - URL страницы, с которой был сделан переход

Управление сессиями и куки

Сессии позволяют сохранять состояние между несколькими HTTP-запросами. Это особенно важно при работе с авторизацией и сайтами, требующими аутентификации.

Создание и использование сессии

session = requests.Session()

# Устанавливаем куки через первый запрос
session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')

# Куки автоматически отправляются в последующих запросах
response = session.get('https://httpbin.org/cookies')
print(response.text)

Преимущества использования сессий

  • Автоматическое управление куки
  • Переиспользование TCP-соединений для повышения производительности
  • Возможность установки общих заголовков для всех запросов сессии
  • Сохранение параметров авторизации

Загрузка файлов из интернета

Библиотека requests позволяет легко загружать файлы различных форматов с веб-серверов.

Загрузка изображений и документов

url = 'https://example.com/document.pdf'
response = requests.get(url)

with open('document.pdf', 'wb') as file:
    file.write(response.content)

Загрузка больших файлов с потоковой обработкой

Для больших файлов рекомендуется использовать потоковую загрузку для экономии памяти:

url = 'https://example.com/large-file.zip'
response = requests.get(url, stream=True)

with open('large-file.zip', 'wb') as file:
    for chunk in response.iter_content(chunk_size=8192):
        file.write(chunk)

Обработка ошибок и исключений

Правильная обработка ошибок критически важна для создания надежных приложений, работающих с сетью.

Основные типы исключений

try:
    response = requests.get('https://api.github.com/invalid-url', timeout=5)
    response.raise_for_status()  # Вызывает исключение при HTTP-ошибке
    
except requests.exceptions.HTTPError as err:
    print(f"HTTP ошибка: {err}")
    
except requests.exceptions.ConnectionError:
    print("Ошибка соединения с сервером")
    
except requests.exceptions.Timeout:
    print("Превышено время ожидания ответа")
    
except requests.exceptions.RequestException as e:
    print(f"Произошла неожиданная ошибка: {e}")

Проверка статусов ответа

response = requests.get('https://api.example.com/data')

if response.status_code == 200:
    print("Запрос выполнен успешно")
elif response.status_code == 404:
    print("Ресурс не найден")
elif response.status_code == 500:
    print("Внутренняя ошибка сервера")
else:
    print(f"Получен статус: {response.status_code}")

Настройка тайм-аутов запросов

Установка тайм-аутов предотвращает зависание программы при медленных или недоступных серверах.

Типы тайм-аутов

# Тайм-аут подключения и чтения данных
response = requests.get('https://httpbin.org/delay/10', timeout=(5, 30))

# Общий тайм-аут для всего запроса
try:
    response = requests.get('https://httpbin.org/delay/5', timeout=2)
    print(response.text)
except requests.exceptions.Timeout:
    print("Время ожидания истекло")

Рекомендации по установке тайм-аутов

  • Тайм-аут подключения: 3-5 секунд
  • Тайм-аут чтения: 15-30 секунд
  • Для API: 10-15 секунд
  • Для загрузки файлов: 60-120 секунд

Работа с прокси-серверами

Прокси-серверы используются для обхода географических ограничений, обеспечения анонимности или работы через корпоративные сети.

Настройка HTTP и HTTPS прокси

proxies = {
    'http': 'http://proxy-server.com:8080',
    'https': 'https://proxy-server.com:8080'
}

response = requests.get('https://httpbin.org/ip', proxies=proxies)
print(response.text)

Прокси с авторизацией

proxies = {
    'http': 'http://username:password@proxy-server.com:8080',
    'https': 'https://username:password@proxy-server.com:8080'
}

response = requests.get('https://example.com', proxies=proxies)

Методы авторизации в HTTP

Современные веб-сервисы используют различные методы авторизации для защиты данных и контроля доступа.

HTTP Basic Authentication

from requests.auth import HTTPBasicAuth

response = requests.get(
    'https://httpbin.org/basic-auth/user/pass',
    auth=HTTPBasicAuth('user', 'pass')
)
print(response.status_code)

# Альтернативный способ
response = requests.get(
    'https://httpbin.org/basic-auth/user/pass',
    auth=('user', 'pass')
)

Bearer Token авторизация

headers = {
    'Authorization': 'Bearer YOUR_API_TOKEN_HERE',
    'Content-Type': 'application/json'
}

response = requests.get('https://api.example.com/data', headers=headers)
print(response.json())

API Key авторизация

# В заголовках
headers = {'X-API-Key': 'your-api-key-here'}
response = requests.get('https://api.example.com/data', headers=headers)

# В параметрах URL
params = {'api_key': 'your-api-key-here'}
response = requests.get('https://api.example.com/data', params=params)

Дополнительные возможности requests

Отправка файлов на сервер

# Отправка одного файла
files = {'file': open('document.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)

# Отправка нескольких файлов
files = {
    'file1': open('document1.txt', 'rb'),
    'file2': open('document2.txt', 'rb')
}
response = requests.post('https://httpbin.org/post', files=files)

Настройка повторных попыток

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

session = requests.Session()

retry_strategy = Retry(
    total=3,                # Общее количество попыток
    backoff_factor=1,       # Задержка между попытками
    status_forcelist=[429, 500, 502, 503, 504],  # Статусы для повтора
)

adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount('http://', adapter)
session.mount('https://', adapter)

response = session.get('https://unstable-api.example.com')

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

Что такое requests в Python

Requests - это третья библиотека Python, предназначенная для выполнения HTTP-запросов. Она предоставляет простой и удобный интерфейс для работы с веб-сервисами, API и веб-скрапинга.

Как решить проблему блокировки запросов

Если веб-сайт блокирует ваши запросы, попробуйте следующие методы:

  • Добавьте реалистичный User-Agent заголовок
  • Используйте задержки между запросами
  • Настройте ротацию прокси-серверов
  • Имитируйте поведение реального браузера
  • Соблюдайте robots.txt правила сайта

Отличия requests от стандартной urllib

Библиотека requests имеет несколько преимуществ перед стандартной urllib:

  • Более простой и интуитивный API
  • Автоматическая обработка куки и сессий
  • Встроенная поддержка JSON
  • Лучшая обработка ошибок
  • Поддержка различных методов авторизации
  • Более читаемый код

Работа с REST API

Библиотека requests идеально подходит для работы с REST API благодаря поддержке всех HTTP-методов и автоматической обработке JSON:

# GET - получение данных
response = requests.get('https://api.example.com/users/1')
user = response.json()

# POST - создание новой записи
new_user = {'name': 'John', 'email': 'john@example.com'}
response = requests.post('https://api.example.com/users', json=new_user)

# PUT - обновление записи
updated_user = {'name': 'John Updated', 'email': 'john.new@example.com'}
response = requests.put('https://api.example.com/users/1', json=updated_user)

# DELETE - удаление записи
response = requests.delete('https://api.example.com/users/1')

Полезные ресурсы для изучения

Для углубленного изучения библиотеки requests рекомендуется ознакомиться с официальной документацией и дополнительными материалами:

  • Официальная документация на английском языке
  • Переводы документации на русский язык
  • Примеры кода на GitHub
  • Обучающие статьи и видеоуроки
  • Форумы и сообщества разработчиков Python

Заключение

Библиотека requests представляет собой мощный и универсальный инструмент для работы с HTTP-запросами в Python. Она одинаково хорошо подходит как для простых задач получения данных из интернета, так и для сложных интеграций с современными API и системами авторизации.

Основные преимущества использования requests включают простоту освоения, надежность работы, обширную функциональность и активную поддержку сообщества. При работе с библиотекой важно помнить о безопасности, правильно обрабатывать возможные ошибки и всегда использовать проверенные источники данных.

Освоив принципы работы с requests, вы получите надежный инструмент для решения широкого спектра задач, связанных с сетевым взаимодействием в Python-приложениях.

Новости