Requests - одна из самых популярных Python библиотек для работы с HTTP протоколом. Она позволяет легко и быстро делать HTTP запросы в приложениях на Python. Давайте разберемся, как ее использовать.
Основы работы с Requests
Requests была создана в 2011 году как простая и интуитивная библиотека для HTTP. С тех пор она стала невероятно популярной среди Python разработчиков. Сегодня Requests - один из самых скачиваемых Python модулей с более чем 40 000 звезд на GitHub.
Установить Requests можно с помощью менеджера пакетов pip:
pip install requests
После этого библиотеку можно импортировать в код:
import requests
Давайте посмотрим, как делать базовые HTTP запросы с Requests. Для каждого типа запроса есть соответствующий метод:
- GET -
requests.get()
- POST -
requests.post()
- PUT -
requests.put()
- DELETE -
requests.delete()
Эти методы принимают URL в качестве первого аргумента. Также можно передать дополнительные параметры:
- headers - заголовки запроса
- params - GET параметры в URL
- data - данные для POST запроса
- json - данные в формате JSON
После выполнения запроса мы получаем объект Response. В нем содержится вся информация об ответе сервера:
- status_code - HTTP код ответа
- headers - заголовки ответа
- content - тело ответа
Например, сделаем простой GET запрос:
import requests response = requests.get('https://api.github.com') print(response.status_code) print(response.headers['Content-Type']) print(response.text)
Requests умеет автоматически обрабатывать ошибки и исключения, которые могут возникнуть при HTTP запросах. Например, при отсутствии интернета будет выброшено исключение ConnectionError. При ошибке 404 - NotFound и т.д. Таким образом мы можем упростить обработку различных ситуаций в нашем коде.
Работа с данными в Requests
Одно из главных преимуществ Requests - удобная работа с данными в популярных форматах. Рассмотрим основные возможности.
Полученный от сервера ответ можно легко преобразовать в словарь Python если данные в формате JSON:
import requests response = requests.get('https://api.github.com') data = response.json() print(data['current_user_url'])
Аналогично, для отправки данных в формате JSON на сервер используется параметр json:
import requests data = {'key1': 'value1', 'key2': 'value2'} response = requests.post('https://httpbin.org/post', json=data)
Для работы с XML Requests также предоставляет удобные методы:
import requests response = requests.get('https://httpbin.org/xml') xml = response.xml print(xml['slideshow']['slide']['title'])
Еще одна распространенная задача - загрузка файлов на сервер и скачивание файлов. Это легко реализуется с помощью параметров files и stream соответственно:
import requests url = 'https://httpbin.org/post' files = {'file': open('report.pdf', 'rb')} response = requests.post(url, files=files)
import requests url = 'https://httpbin.org/image/png' response = requests.get(url, stream=True) with open('image.png', 'wb') as f: for chunk in response.iter_content(1000): f.write(chunk)
Также в Requests можно настроить таймауты, использовать сессии для сохранения параметров между запросами, работать через прокси и многое другое.
Дополнительные возможности
Помимо базового функционала, Requests поддерживает ряд дополнительных и расширенных возможностей.
Модуль requests.async
позволяет делать асинхронные HTTP запросы с использованием asyncio и aiohttp. Это помогает увеличить производительность при работе с IO ожиданиями.
Для отладки запросов полезен модуль requests_toolbelt
. Он предоставляет инструменты для логирования, отслеживания времени выполнения и проксирования запросов.
Библиотека responses
помогает легко тестировать код, использующий Requests, путем перехвата запросов.
Существуют официальные интеграции Requests с популярными фреймворками Django и Flask. Они позволяют легко использовать Requests в веб-приложениях на этих фреймворках.
Для работы с OAuth авторизацией есть расширение requests-oauthlib
. Оно упрощает процесс получения и использования OAuth токенов.
Модуль requests_threads
дает возможность параллельно выполнять несколько запросов для увеличения скорости.
В целом, интеграция Requests с другими библиотеками Python очень проста благодаря хорошо продуманному API.
Лучшие практики использования
Чтобы извлечь максимум пользы из Requests, рекомендуется придерживаться следующих лучших практик.
Структурируйте код, вынося запросы в отдельные функции/методы. Используйте наследование классов Requests для encapsulation.
Правильно обрабатывайте ошибки и исключения. Разбейте на случаи по кодам ответов сервера.
Используйте методы session
для сохранения параметров между запросами вместо глобальных переменных.
В случае большого количества запросов используйте пули соединений и асинхронные вызовы.
Тестируйте код с Requests обязательно. Модуль responses
поможет с мокированием запросов.
Обезопасьте работу при передаче конфиденциальных данных: HTTPS, SSL сертификаты, OAuth.
Документируйте использование Requests подробными комментариями и докстрингами.
При возникновении проблем обращайтесь на Stack Overflow или в официальный репозиторий GitHub.
Дополнительные рекомендации и ответы на частые вопросы можно найти в официальной документации Requests.