*ARGS.TECH | BLOG | Python Requests: Полный гайд (GET, POST, загрузка файлов)
Loading...
BLOG

Python Requests: Полный гайд (GET, POST, загрузка файлов)

Python Requests: Полный гайд (GET, POST, загрузка файлов)


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


Введение


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


Нужно ли тебе получить веб-страницу, отправить JSON в API или загрузить файл - requests делает это интуитивно понятным.


Шаг 0: Настройка виртуального окружения


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


Посмотри наш быстрый гайд о том, как использовать виртуальные окружения Python (venv), чтобы всё настроить за считанные секунды.


Шаг 1: Установка


requests не входит в стандартную библиотеку Python, поэтому её нужно установить через pip.


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

(env) xinit@localhost:~$ pip install requests


Шаг 2: GET-запросы (и query-параметры)


Самый распространенный метод - это GET. Ты можешь передавать параметры запроса (часть URL после ?) в виде словаря Python, используя аргумент params. Библиотека автоматически закодирует их за тебя.


Получение данных с параметрами:

import requests


# Это отправит запрос на: https://example.com/get?key=value&page=2

params = {'key': 'value', 'page': 2}

r = requests.get(url='https://example.com/get', params=params)


print(r.status_code)

print(r.json())


Шаг 3: POST-запросы (отправка JSON)


При взаимодействии с современными API часто нужно отправлять данные. Использование параметра json автоматически добавляет правильный заголовок Content-Type: application/json и форматирует твой словарь.


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

import requests


data = {'username': 'new_user', 'active': True}

r = requests.post(url='https://example.com/post', json=data)


print(r.status_code)

print(r.json())


Шаг 4: Кастомные заголовки и аутентификация


API часто требуют токены аутентификации или специфические строки User-Agent. Ты можешь передать их в словаре через аргумент headers.


Отправка запроса с заголовком Authorization:

import requests


headers = {'Authorization': 'Bearer YOUR_SECRET_TOKEN'}

r = requests.get(url='https://example.com/auth', headers=headers)


print(r.status_code)

print(r.json())


Шаг 5: Загрузка файлов (multipart upload)


Чтобы загрузить файлы (например, отправить форму с полем для файла), используй аргумент files. Всегда открывай файлы в бинарном режиме ('rb').


Загрузка PDF-файла:

import requests


files = {'file': open('/home/user/Downloads/file.pdf', 'rb')}

r = requests.post(url='https://example.com/upload', files=files)


print(r.status_code)

print(r.json())


Шаг 6: Скачивание файлов


Если ответ представляет собой бинарный файл (например, изображение или PDF), тебе следует обращаться к r.content и записывать его в файл в бинарном режиме ('wb').


Скачивание и сохранение файла:

import requests


r = requests.get(url='https://example.com/file')


with open('downloaded_file.pdf', 'wb') as f:

    f.write(r.content)


Шаг 7: Лучшие практики (таймауты и обработка ошибок)


В продакшн-коде всегда устанавливай таймаут. По умолчанию requests будет висеть бесконечно, если сервер не отвечает, что может заморозить твоё приложение. Кроме того, проверять status_code вручную утомительно. Используй метод .raise_for_status(), чтобы автоматически вызывать исключение, если запрос не удался (например, 404 Not Found или 500 Server Error).


Надежный шаблон запроса:

import requests


try:

    # Ждем ответ 5 секунд, иначе вызываем ошибку

    r = requests.get('https://example.com/api', timeout=5)


    # Вызываем исключение для статус-кодов 4xx или 5xx

    r.raise_for_status()


    print(r.json())


except requests.exceptions.RequestException as e:

    print(f'Произошла ошибка: {e}')


Заключение


Теперь у тебя есть прочная база для работы с HTTP в Python. Ты умеешь получать данные, отправлять JSON, работать с аутентификацией, а также надежно обрабатывать ошибки и таймауты. Эти паттерны покрывают подавляющее большинство задач по интеграции с API.

Top button